基于有界k_d树的最近点搜索算法_刘宇

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第36卷 第7期2008年 7月 华 中 科 技 大 学 学 报(自然科学版)

J.H uazhong U niv.o f Sci.&T ech.(N atural Science Edition)Vo l.36N o.7 Jul. 2008

收稿日期:2007-04-05.

作者简介:刘 宇(1976-),男,博士研究生,E -ma il:headheat@163.co m.

基金项目:国家自然科学基金资助项目(5035020,50405032);国家重点基础研究发展计划资助项目

(2003CB716207).

基于有界k -d 树的最近点搜索算法

刘 宇 熊有伦

(华中科技大学机械科学与工程学院;数字制造装备与

技术国家重点实验室,湖北武汉430074)

摘要:提出了一种基于有界k -d 树的最近点搜索算法.算法的原理是:由根节点中的包围盒确定树中数据的空间范围,并在搜索过程中不断划分包围盒来缩小搜索范围,同时递归地计算查询点到包围盒的距离.结合优先级队列,基于有界k -d 树的最近点搜索算法拓展到搜索按距离远近排列的多个最近点.实测和仿真分析表明,本搜索算法的计算效率高于传统的搜索算法.

关 键 词:逆向工程;最近点搜索;有界k -d 树;包围盒

中图分类号:T P391 文献标识码:A 文章编号:1671-4512(2008)07-0073-04

Algorithm for searching nearest -neighbor based on the bounded k -d tree

L iu Yu X iong Youlun

(Colleg e of M echanical Science and Engineer ing;St ate Key Labor ator y o f Dig ital M anufacturing Equipment and T echno log y,H uazhong U niv ersity of Science and T echnolog y,W uhan 430074,China)

Abstract :An alg orithm for searching nearest -neighbo r is proposed based on the bounded k -d tree of

w hich the spatial range o f the data is restricted by the bounded box of the r oot node.The search area in the searching pr ocess is reduced by continually dividing bo unded bo xes.T he distance fr om a query point to a bounded bo x is also co mputed recursively.Co mbined w ith a pr io rity queue,the clo sest po int query alg orithm can be generalized to search mult-i nearest -neig hbor s o rdered by their distances to a

query point.T he ex perim ents on bo th real and synthetic data sets show that the query alg orithm based on the bounded k -d tree is com putationally m ore efficient than some traditional alg orithm s.Key words :reverse engineering;nearest -neighbo r searching;bounded k -d tree;bounded box 在逆向工程中,基于离散坐标点的操作通常需要查询一点的相邻点[1,2].随着数据获取技术的飞速发展,需处理的数据点数目动辄数十万或上百万,提高相邻点查询算法的效率能有效提高逆向工程中数据处理的效率.k 维二叉搜索树(k -dimensional binary search trees ,简称k -d 树

[3]

),

是对k 维数据进行空间查询的有效数据结构,受到关注和研究[4~7],已在矢量量化、数据压缩、数据库匹配查询等方面得到了广泛应用.

本文将k -d 树与空间包围盒相结合,构造了有界k -d 树,提出了相应的最近点搜索算法.

1 有界k -d 树

与以往文献中不同的是,本文在有界k -d 树的内部节点中,定义了左右划分平面L l 和L r 来

表示对该节点中数据的划分(见图1),在整个树的根节点中还存储了一组主对角点的坐标来表示k -d 树中数据的包围盒.因此,有界k -d 树的内部节点由2个指向其他节点或者为空的指针、维数辨别量、2个划分值组成.有界k -d 树的叶节点则由指向该叶节点中所包含的数据点列的指针和表示该数据点列大小的值组成.

图1 同一节点处的不同划分平面

有界k -d 树与一般k -d 树一样,用递归的方式进行构造.在每个内部节点处,选取一个中值将以该节点为根节点的树划分为大小基本相等(所包含的数据点数目的差别不超过1)的2棵子树.这样构造的k -d 树从根节点到叶节点的平均搜索长度为[lo g 2n],可以提高搜索效率,其中[]表示向下取整数.从n 个数据点构造有界k -d 树所需的存储空间和计算时间与一般k -d 树为同一量级,分别为O(n)和O(n log n).

图1以二维数据为例,说明左右划分平面对数据的划分,其中L m 表示中值划分平面,p 1和p 2是左子树中的点,p 3是右子树中的点.L m 可以由L l 和L r 来确定.设p 2和p 3分别是左右子树中到L m 最近的点.则L m 经过p 2和p 3连线的中点.选择介于L l 和L r 之间任一平面作为划分平面,数据点在左右子树中的分配均不会发生变化.但选择与图中的圆相交的划分平面时,若p 1为查询点q 的当前的最近点,则搜索算法通过相交测试,将会对右子树中的数据点进行搜索.因此有界k -d 树的内部节点用点p 2和p 3所确定的值s l 和s r 分别表示划分平面L l 和L r 沿相应坐标轴的位置,以使搜索算法减少可能的比较次数.

2 相邻点搜索

设输入数据点集为P ={p i ,i =1,2,,,n},式中p i 为k 维空间中的点.点q 在P 中的m 个最近相邻点查询就是在P 中搜索与查询点q

距离最近的m 个点.当m =1时,则是在P 中搜索点q 的最近点.在查询中,数据点一般为欧几里德空间中的点,点之间的距离定义为欧氏距离.

设l =[l 1,l 2,,,l k ]T 和h =[h 1,h 2,,,h k ]T 是k 维欧氏空间中的2个点,l i [h i (1[i [k).则l 和h 所定义的包围盒B 是以l 和h 为主对角点且各面与坐标轴垂直的一个2k 面体.点q =[q 1,q 2,,,q k ]T

到B 的最近点是B 的内部或边界上与q 距离最近的点,它们之间的距离则

是q 到B 的距离.有界k -d 树采用平方距离以避

免开方运算,q 到B 的平方距离

D(q ,B)=E k

i=1

(q i

-r i )2,

(1)

式中:r i =

s i (q i

b i (q i >b i );

q i (其他).

称D(q ,B)为查询点q 到与B 对应的节点的

距离.有界k -d 树的根节点中记录了树中数据的包围盒,而其他节点的包围盒则可根据节点中左右划分平面从父节点的包围盒得到.图2以二维数据为例,说明了父节点与子节点的包围盒的关系.图中实线矩形B 是父节点的包围盒,虚线表示父节点中由s l 和s r 定义的左右划分平面L l 和L r .L l 和L r 将包围盒B 划分为B l ,B m 和B r 3部分.左右子节点包围盒分别是B l 和B r .

图2 父节点包围盒与子节点包围盒的关系

查询点q 到子节点的距离也可以在q 到父节点的距离的基础上计算得到.设父节点中的划分平面与第j 个坐标轴垂直.则有:

D(q ,B l )=

D(q ,B ) (q j [s l ),

D(q ,B )-(q j -r j )2

+(q j -s l )2 (q j >s l );(2)D(q ,B r )=

D (q ,B)-(q j -r j )2+

(q j -s r )2

(q j

(3)

基于有界k -d 树的最近点搜索算法从根节点开始,依次计算查询点到左右子节点的包围盒的距离,然后选择距离较近的节点向下搜索.当距离相等时,默认向左节点进行搜索.到达叶节点后,计算查询点与叶节点中的数据点的最近距离,然后向上沿搜索路径搜索与查询点的距离小于当前最近距离的子树.由式(2)和(3),既可以从查询点到父节点的距离计算查询点到子节点的距离,也可以从查询点到子节点的距离计算查询点到父节点的距离.因而搜索算法中只需记录当前节点的包围盒和查询点到该包围盒的距离,并在搜索过程中对包围盒和到包围盒的距离进行动态更新.于是,给出如下基于有界k -d 树的最近点搜索算

#

74# 华 中 科 技 大 学 学 报(自然科学版) 第36卷