3.8 四叉树数据结构--2019.6.29--zyy
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
四叉树数据结构武汉大学遥感信息工程学院余长慧
常规四叉树线性四叉树
四叉树分割的基本思想
1如果某个子区的所有格网都含有相同的值,则子区不再分割;
否则,把子区再分割成四个子区域;把一副图像或一副栅格地图(2k x2k ,k>1)等分成四部分,逐块检查其格网值。
递归分割,直到每个子块都只含有相同的灰度或属性值为止。
1
234
5
671112
1314
1519
161718
8910
常规四叉树
2结点:父结点指针,四个子结点指针,本结点灰度或属性值常规四叉树方法:记录叶结点外,还要记录中间结点;结点之间的联系靠指针表达,也叫指针四叉树。
增加了存储量和操作的复杂性。
3
线性四叉树
线性四叉树方法:只存储叶结点的信息
结点:位置、大小和格网值
叶结点的位置信息:遵照一定的规则对叶结点编号,这种编号称为地址码
四叉树分解过程
3
线性四叉树
线性四叉树的编码
地址码:隐含叶结点的位置信息
四进制Morton码
十进制Morton码
(1)基于四进制的Morton码及四叉树的建立
线性四叉树
3方法1:自上而下分裂建立四叉树,过程中逐步产生Morton 码方法2:首先计算每个格网的Morton 码,然后扫描自下而上合并,建立四叉树
方法1:分解过程(自上而下)第一步
01编码方向
23
方法1:分解过程(自上而下)第二步
01 23
1011
1213 2021
2223
3031
3233
方法1:分解过程(自上而下)第二步
1011
1213
2021 22233031 3233
方法1:分解过程(自上而下)第三步
1011
1213
2021 22233031
3233
3031
33
方法1:分解过程(自上而下)第四步
3031
33
方法2:合并方法(自下向上)
将二维矩阵元素的下标转换成Morton 地址码
四进制Morton 码的计算方法:
当>
时当时2log ()b k 0(,2)10II k
k I MOD I ⎡⎤⎣⎦
==∙∑k I II
=k 1(/2)K I INT I -=0k = 0k (a )将十进制的行列号转换成二进制数
MOD :取余函数,INT :取整函数,II :十进制行号,I b :二进制行号,J b :二进制列号,k :中间循环变量。
方法2:合并方法(自下向上)
将二维矩阵元素的下标转换成Morton 地址码
四进制Morton 码的计算方法:
(b )计算对应的Morton 码MQ
b b
2Q M I J =*+
四进制的Morton码
(c)将元素按码的升序排列成线性表
依次检查每四个相邻MQ码对应的网格值,相同合并;不相
同记盘
•MQ码,深度,格网值
依次检查每四个大块的格网值•不同或某子块已记盘,则记盘•相同,合并
循环
没有能够合并的子块,终止
MQ码格网值
000
001
002
003
自上而下的分裂和自下而上的合并产生一致的四叉树
四进制的Morton码及四叉树
缺点:
(1)码的存储开销大,由于大多数语言不支持四进制变量,需要用十进制长整形表示Morton码,是一种存储浪费;
(2)运算效率不高。
(2)基于十进制的Morton码及四叉树的建立
线性四叉树
3Mark 等人(1989年)建议:
采用十进制的Morton 码作为线性四叉树的地址码,并且使用自下而上的合并方法建立四叉树。
十进制Morton 码计算及四叉树的建立
MOD :取余函数,INT :取整函数,II :十进制行号,I f :伪码行号,J f :伪码列号,k :中间循环变量。
(a )将十进制的行号和列号转换为一种特殊码,称为伪码(I f , J f )
当>
时当时2log ()f 0(,2)4II k
k k I MOD I ⎡⎤⎣⎦
==∙∑k I II
=k 1(/2)K I INT I -=0k = 0k (b )计算对应的Morton 码M D D f f
2M I J =*+
十进制的Morton码
十进制四叉树的建立
线性四叉树的特点
优点:
压缩效率高,压缩和解压缩较方便,阵列各部分的分辨率可不同,既可精确地表示图形结构,又可减少存贮量,易于进行大部分图形操作和运算。
缺点:
具有图形编码的不定性,同一形状和大小的多边形可得出完全不同的四叉树结构。
因此,不利于形状分析和模式识别。