问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

kd-tree的构建算法

发布网友 发布时间:2022-05-05 10:54

我来回答

1个回答

热心网友 时间:2022-06-27 10:04

k-d树是一个二叉树,每个节点表示一个空间范围。表1给出的是k-d树每个节点中主要包含的数据结构。
表1 k-d树中每个节点的数据类型 域名 数据类型 描述 Node-data 数据矢量 数据集中某个数据点,是n维矢量(这里也就是k维) Range 空间矢量 该节点所代表的空间范围 split 整数 垂直于分割超平面的方向轴序号 Left k-d树 由位于该节点分割超平面左子空间内所有数据点所构成的k-d树 Right k-d树 由位于该节点分割超平面右子空间内所有数据点所构成的k-d树 parent k-d树 父节点 从上面对k-d树节点的数据类型的描述可以看出构建k-d树是一个逐级展开的递归过程。表2给出的是构建k-d树的伪码。
表2 构建k-d树的伪码 算法:构建k-d树(createKDTree) 输入:数据点集Data-set和其所在的空间Range 输出:Kd,类型为k-d tree 1.If Data-set为空,则返回空的k-d tree 2.调用节点生成程序:
(1)确定split域:对于所有描述子数据(特征矢量),统计它们在每个维上的数据方差。以SURF特征为例,描述子为64维,可计算64个方差。挑选出最大值,对应的维就是split域的值。数据方差大表明沿该坐标轴方向上的数据分散得比较开,在这个方向上进行数据分割有较好的分辨率;
(2)确定Node-data域:数据点集Data-set按其第split域的值排序。位于正中间的那个数据点被选为Node-data。此时新的Data-set' = Data-set\Node-data(除去其中Node-data这一点)。 3.dataleft = {d属于Data-set' && d[split] ≤ Node-data[split]}
Left_Range = {Range && dataleft} dataright = {d属于Data-set' && d[split] > Node-data[split]}
Right_Range = {Range && dataright} 4.left = 由(dataleft,Left_Range)建立的k-d tree,即递归调用createKDTree(dataleft,Left_
Range)。并设置left的parent域为Kd;
right = 由(dataright,Right_Range)建立的k-d tree,即调用createKDTree(dataright,Right_
Range)。并设置right的parent域为Kd。 以上述举的实例来看,过程如下:
由于此例简单,数据维度只有2维,所以可以简单地给x,y两个方向轴编号为0,1,也即split={0,1}。
(1)确定split域的首先该取的值。分别计算x,y方向上数据的方差得知x方向上的方差最大,所以split域值首先取0,也就是x轴方向;
(2)确定Node-data的域值。根据x轴方向的值2,5,9,4,8,7排序选出中值为7,所以Node-data = (7,2)。这样,该节点的分割超平面就是通过(7,2)并垂直于split = 0(x轴)的直线x = 7;
(3)确定左子空间和右子空间。分割超平面x = 7将整个空间分为两部分,如图2所示。x < = 7的部分为左子空间,包含3个节点{(2,3),(5,4),(4,7)};另一部分为右子空间,包含2个节点{(9,6),(8,1)}。

如算法所述,k-d树的构建是一个递归的过程。然后对左子空间和右子空间内的数据重复根节点的过程就可以得到下一级子节点(5,4)和(9,6)(也就是左右子空间的'根'节点),同时将空间和数据集进一步细分。如此反复直到空间中只包含一个数据点,如图1所示。最后生成的k-d树如图3所示。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
厂口银杏园地址在哪里? 昆明银杏大道在什么地方 昆明哪些地方有银杏树 从二月河“帝王三部曲”看90年代的文学场(一) 二月河《落霞三部曲》读书札记 安装织梦CMS到新浪SAE,这数据库主机,用户都是什么?这个是安装在新浪SE... SAE上的mySql初始化了怎么用啊,java怎么连上去啊,地址,端口号,账号... 金鱼尾部出现血丝,怎么办? 金鱼尾鳍上有血丝,急躁不安是什么病 请问?家里养的金鱼,一夜过来,金鱼尾巴上面都有红色血丝是怎么回事... 驱蚊草发蔫~ 驱蚊草怎么焉了?叶子都耷拉着? 柠檬天竺葵:驱蚊草怎么养,我买了2盆驱蚊草,运了4天才回来,觉得有点枯,叶子有点黄,觉得没精神,怎 我家的驱蚊草老叶子黄啊并枯。我在广州,2天浇一次水,阳光只有下午才有,浇水较少,我该怎么办?? 驱蚊草叶子边缘发黄怎么治疗 刚买来的驱蚊草叶子发黄了,怎么办?是该浇水了,还是嗮太阳了? 驱蚊草的叶子越来越黄了该怎么办 我家的驱蚊草换盆后叶子越来越黄了,会死吗,怎么办? 驱蚊草叶子变黄 驱蚊草叶子一天天在变黄,怎么办? 驱蚊草怎么养 驱蚊草叶子变黄的救治方法 驱蚊草叶子枯黄是怎么回事? 驱蚊草叶子发黄怎么回事 驱蚊草叶子发黄怎么办 华为手机这是什么字体? 请问现在HPV一共有几种呀,有什么不同吗? 请问HPV一共有几种呀? HPV总共是23种吗 HPV病毒有哪些类型? 百度云如何把下载完成的文件放到文件夹里 驱蚊草快死了怎么救 kdtree算法报错 python如何在众多的点中找到与特定点最近的点的算法 我种的驱蚊草叶子发黄了,修过一次还是不行哇,怎么办? 你好!我想咨询一下关于图像配准的问题。关于BBF算法,怎么能把这个算法和surf算法结合起来?谢谢! 驱蚊草的叶子变成这样了是什么原因 8点算法 需要哪些sift数据 sift特征点正确匹配率是怎么计算出来的 怎么解绑手机号 水培植物的水里会有蚊子幼虫,好恶心啊,怎么解决 为什么“水养植物”的水里会生出小虫? 蚊子在水养植物里产卵怎么办 如何灭水培植物的蚊子 水养植物怎样才能除蚊子幼虫 如何防止水养花的水里长孑孓(蚊子的幼虫) 怎样去除水培植物里的蚊子幼虫 怎么解绑手机号? 好怕水培的植物长虫子,有没有什么好的预防措施 伊维菌素溶液可以杀死水培植物容器内的蚊虫卵吗? 怎么解绑手机号?