可扩展四叉树结构及其先序遍历算法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
&
前言
地理信息数据和图象数据表达时, 经常会使用四叉树作为
下文详细介绍了该四叉树的结构表达以及采用一个游标类中 各成员函数进行的先序遍历算法。 该先序遍历的算法基础是树 该算法通过一个迭代过程实现对树中所有 的 先 序 遍 历 算 法 +!,, 结点的遍历。 另外该算法也参考了循环链表的遍历算法 +!,。 然后 给出本数据结构应用于数字图象数据表达的编码格式。 实践表 明, 该算法完全可以应用于地理信息系统栅格数据和数字化图 象数据表达的需要。是一种可选而高效的数据结构。
T T
/070@0 B ; /070@0 4567/ ;
图!
实现该文四叉树的几个类及其继承结构
数据类型 * 可以是一个数字,也可以是读者自己定义的 类。生成这样一个数据结构需要的三个过程分别描述如下: 第一个递归过程通过给定该树的层次, 建立一个满四 ( &) 叉树。 第二个递归过程确定该满四叉树的坐标, 同时确定结 ( !) 点的属性值。 第三个递归过程确定对该满四叉树根据结点的属性 ( #) 剪 枝。
算法: @0AB7;@0C47;== *DB0E<.6/ *:;<0:=;7( +,-./0C*DB0EF 4G::0H@)
在四叉树表达中, 树根对应整幅图, 而树叶对应各单个像 素或具有相同特性的像素组成的方阵。四叉树由多级构成, 对 其结点总 应图象的多分辨率, 如图 ’ 。对一个有 ! 级的四叉树, 数 " 最多为 >#?:
防止内存泄露 J J 释放动态内存,
( 注意: 每一层的结点个数是 ’ 的正整数次幂个, 并不仅仅是图中所示的 ’ 个)
图 & 中, 圆圈代表树的叶结点, 有填充的圆代表非叶结点, 每个结点包含一个用户自己定义的对象; 树的拓扑结构和每个 结点的内容由树的构造过程决定。 每棵树含且仅含一个根结点 树的每一层是一个循环双向链表。 每个链表的头称为大 ())*。 儿子, 层次中每个结点具有 ’ 个 指 针 域 , 在 +,-./01,23 类 中 定义。需要指针, 每个叶结点的 4567/ 指针指向 -899。
!#
*(, 阈值, 其它变量说明如前所述。挖掘算法描述 ( T:9A O9;A&HGJ )
为了评测试验结果, 引 入 查 全 率 NJG&88、 准 确 率 6@JG9;9?H 两个测试指标。其中, 6@JG9;9?H &’ $ () ^)""c , ’ 是被挖掘方法 正确输出的变形特征项数, () 为 被 挖 掘 方 法 输 出 的 总 变 形 特 征项数; NJG&88U’ $ ) ^)""c , ’ 是被挖掘方法正确输出的变形特 征项数, ) 是文档中经过变形操作的特征项数。 试验结果如表 ) 所示。通过试验结果分析可以看出, 用关 联规则分析方法挖掘不良信息特征项的准确率和查全率都比 较高, 平均可达 .5$(%c 和 )""c 。但也发现对有些文档挖掘的 精度不太理想,这主要是因为这些文档包含的特征项较少, 没 有满足系统设置的阈值, 另外一个原因就是部分特征项变形十 分严重( 人工无法识别) 所致。
其数据结构。 在四叉树结构采用不同的存储结构时, 其构造、 遍 历、 剪枝方式以及开发复杂度等会非常不同。一般的四叉树数 据结构的设计不采用通用的树方式, 有四个指向其孩子结点的 指针域, 子孙之间不再考虑相互连接问题。这样不但造成了该 四叉树结构的可扩展性较差, 而且在同一层间访问时, 会增加 额外的负担。 谭兵等采用四叉树结构做地形 ’() 表示时,对于树中的 任意一个非终端结点,设计的数据结构包含 * 个子结点指针、 一个父结点指针、相临四个结点指针、 * 个结点下标、 * 个消除 拼接缝标志、 & 个记录对角线方向标志和结点覆盖 区 域 的 最 大 误 差 +&,, 这个数据结构虽可以实现地形模型的连续多分辨率表 示, 但是构造时不具有扩展性。而可扩展性是现代程序开发需 要首先考虑可扩展性问题。 因此文章采用一个模板型的树类来 表示四叉树, 该类的基类中定义了四个指针域, 模板类中包容 的类中定义其内容。这个看起来相对复杂( 其实复杂度比上述 的设计大大增强了该数据结构的扩展性。 地形 ’() 相差无几) 这种新的数据结构表达基于循环链表和通用的树型结构。
6N ( 4567/REH0S@ OO 4567/REB;:0H@RE4567/ ) J J 该循环链表
是否遍历完毕
I
图& 可扩展四叉树数据结构
4567/O-899 ; T 07=0 J J 继续遍历该链表 I +,-./0C *DB0 E F ) 4567/REH0S@ ; 4567/ O ( T T 4G::0H@OB % 计算机工程与应用
针。 并且, 这些子孙的双亲指向其大儿子。 每棵树有且仅有一个 根结点。该对象的任何结点可以具有任何数目的子孙。一棵树 的游标器定义了以移动该链表来跟踪当前结点、下一个结点, 双亲结点, 甚至任何结点。游标不会改变树的当前状态。
; +,-./0C *DB0 E F 4567/OH0P +,-./0C *DB0E ( B& ) ) ; 访问根结点, 该函数可用一组功能代替 Q6=6@ ( J J 具体处理过程,
$ ! "#!’ # ’ ! ’ ’ # # $#" ! !%&
结点总树一般要小于象素个数。
’
结论及讨论
实验表明, 该四叉树结构具有较好的可扩展性。完全可以
I J J 声明临时变量
, ; *DB0 B&( K&!FK&!, !, #, ", ", +,(;H/.ALH@( ", M) M, N;7=0, K&!, K&!)
!?/%+*-%: ’@=@ :7P:7L7D=@=A5D AL @ S7:D7B P:5TB7? AD A?@E7 P:5I7LLADE NA7B6$UM@6=:77 6@=@ L=:MI=M:7 AL T7==7: =H@D LP@; =A@B @::@G AD A=L ?MB=A:7L5BM=A5D @TABA=G$0= AL P:5P5L76 =H@= @ LP7IA@B CM@6=:77 L=:MI=M:7 =5 :7P:7L7D= E75B5EG ADN5:?@=A5D @D6 ?MB=A:7L5BM=A5D A?@E7:G 6@=@$2H7 L=:MI=M:7 AD=7E:@=7L =H7 @6V@D=@E7 5N IA:IB7 BAL= @D6 =:77 L=:M=M:7$0= I@D 7W=7D6 =5 5=H7: =GP7 5N =:77 L=:MI=M:7 7@LABG @D6 =H7 A?PB7?7D=@=A5D I@D T7 :7ML76 7@LABG$)5:75V7:, =H7 =:@V7:L@B AD =H7 L@?7 B7V7B I@D T7 65D7 =5 :76MI7 =H7 I5?PBAI@=A5D N:5? IHAB6 D567 =5 A=L LATBADEL 5: N:5? IHAB6 D567 =5 A=L P@:7D= D567$2H7 A?; P:5V7?7D= AL EAV7D AD P:7>5:67: =:@V7:L@B @BE5:A=H? @D6 E7D7:@B CM@6=:77 L=:MI=M:7$0= AL @ 7NNAIA7D= 6@=@ L=:MI=M:7$ C&D=1+’/: UM@6=:77 L=:MI=M:7 , X:75:67:, 2:@V7:L@B @BE5:A=H?, 2:77 A=7:@=5:, 0?@E7 P:5I7LLADE
一种可扩展四叉树结构及其先序遍历算法
李启青 马建文 哈斯巴干 刘志丽 韩秀珍 ( 中国科学院遥感应用研究所, 北京 &""&"& )
(>?@AB: BACACADE!""%FG@H55$I5?$ID
摘 要 在图象处理领域, 数据表达是一个核心问题。 四叉树数据结构由于比空间占有树组方式使处理具有多分辨率能
!
四叉树结构
通过 -./01 中关于树型结构表达的描述的改进 , 文 章 给
并对原先的遍历游标类及其 出了新的树型结构描述( 如 图 &) 基类的成员函数中返回值从 23 本身调整 到 -.45678293 。 使 用 一 个 模 板 类 描 述 树 型 结 构 -.2:77829 , 它 派 生 自 -.2:77; 另外定义了一个游标类 -.2:770=7:829 类来描述其遍 1.<( 类。 历函数, 该类派生自 -.2:770=7:1.<( , 如图 ! 。 该类是一个模板化的 -.2:77829 对象被用来作为树对 象 , 容器类, 其结点可以包含任何类型的对象。在 -.2:77829 对象 对象的每一层次上是一个循环的双向连表。 每一层的大儿子是 该链表的头,每层的每个孩子具有一个指向其双亲结点的指
BO4G::0H@ ; J J 保存当前指针 4567/ O ( +,-./0C *DB0 E F ) 4G::0H@RE4567/ ; J J 找根的第一棵子树 P5670 ( 4567/ ) J J 终止递归的条件 I J J 先根次序遍历所有子树
; *:;<0:=;7 ( 4567/ ) J J 递归调用自身
文章编号 &""!>%##&>( !""# ) !%>""!!>"!
文献标识码 .
!" #$%&"’&’ ()*’%+&& ,%+)-%)+& *"’ .%/ 0+&1+’&+ 2+*3&+/*4 !451+6%78
96 (6:6"5 ;* <6*"=&" >*/6?*5*" 96) @7646 >*" A6)B7&" ( 0DL=A=M=7 5N O7?5=7 <7DLADE .PPBAI@=A5DL, QHAD7L7 .I@67?G 5N <IA7DI7L, 17ARADE &""&"&)
通过对该数据结构和结点结构的描述和研究, 下面给出该 四叉树结构的遍历算法 *:;<0:=;7, 该算法输入根结点作为当前 结点, 在遍历过程中对结点进行访问处理。因为这里定义的树 型数据结构是递归的, 所以该遍历算法也是在递归的基础上建 立, 需要注意的是在递归过程中包含了循环链表的遍历过程 >!?。 此遍历过程终止递归的条件是当 4567/ 为 -899 时,可见该算 法通用性比较强。
力而倍受青睐。 文章提出并实现了一种可应用于多分辨率图象处理和地理信息数据表达的四叉树结构, 该四叉树综合了 循环链表和普通树结构的优点。具有较强的可扩展性和通用性, 使得同一层次的结点之间可以顺利搜索, 从而大大减少 了查找和从子孙结点到父结点操作回溯的复杂度。 该文对原先的四叉树结构做了相应改进, 并给出了该四叉树数据结构 的先根序遍历算法, 是一种高效的数据结构。 关键词 四叉树结构 先根次序 遍历算法 游标 图象处理 中图分类号 2JK#"$!
基金项目: 国家 %Y# 高技术研究发展计划项目“ 遥感数据智能处理技术与集成” ( 编号: ; 奥运科技专项项目( 编号: QZ"!""&* ) !""!1.["*1"K>! ) 作者简介: 李启青( , 男( 汉族) , 博士, 主要研究方向: 遗传算法, 图象处理。马建文( , 男( 汉族) , 研究员, 博士生导师, 主要研究方向: &[KK> ) &[\#> ) 遥感应用模型与方法研究。 哈斯巴干( , 男( 蒙古族) , 博士, 主要研究方向: 遥感数据模型与处理算法。 刘志丽( , 女( 汉族) , &[YK> ) &[K#> ) 博士, 主要研究方向: 遥感图象处理。
图# 四叉树结点的结构
#$!
图象数据表达
一幅图象可以采用四叉树来表达, 这种表达的优点是可以
方便地计算区域的多种特征。 四叉树是一种利用金字塔式的数 据结构对空间占有数组的编码。当图象是方形的, 且像素点的
U? 。 个数是 ! 的整数次幂时四叉树法最合用 >K,
# 算法及数据表达 #$& 遍历算法描述
应用于图象处理和地理信息数据的表达、 处理领域。使用面向 对 象 方 法 在 Q6=G;7 VWW 开 发 环 境 下 实 现 的 该 数 据 结 构 可 以 被 方便的重用。 ( 下转 ’& 页) 计算机工程与应用 !""#$!%
J J 动态分配内存指向结点的指针内存
; +,-./0C*DB0E F BOH0P +,-./0C *DB0E ( B& )