k-d树

✍ dations ◷ 2025-11-15 17:10:41 #数据结构,树结构

在计算机科学里,-d树( k-维树的缩写)是在维欧几里德空间组织点的数据结构。-d树可以使用在多种应用场合,如多维键值搜索(例:范围搜寻及最邻近搜索)。-d树是空间二分树(Binary space partitioning)的一种特殊情况。

-d树是每个叶子节点都为k维点的二叉树。所有非叶子节点可以视作用一个超平面把空间分割成两个半空间。节点左边的子树代表在超平面左边的点,节点右边的子树代表在超平面右边的点。选择超平面的方法如下:每个节点都与k维中垂直于超平面的那一维有关。因此,如果选择按照x轴划分,所有x值小于指定值的节点都会出现在左子树,所有x值大于指定值的节点都会出现在右子树。这样,超平面可以用该x值来确定,其法线为x轴的单位向量。

有很多种方法可以选择轴垂直分割面( axis-aligned splitting planes ),所以有很多种创建-d树的方法。最典型的方法如下:

这个方法产生一个平衡的-d树。每个叶节点的高度都十分接近。然而,平衡的树不一定对每个应用都是最佳的。

function kdtree ( pointList,  depth){        var  axis := depth mod k;                select median by axis from pointList;                var  node;    node.location := median;    node.leftChild := kdtree(points in pointList before median, depth+1);    node.rightChild := kdtree(points in pointList after median, depth+1);    return node;}

插入元素

移除元素

平衡

在动态插入删除点且不允许预处理插入操作的情况下,一种平衡的方法是使用类似替罪羊树的方法重构整棵树。

最邻近搜索用来找出在树中与输入点最接近的点。

k-d树最邻近搜索的过程如下:


维数灾难让大部分的搜索算法在高纬情况下都显得花哨且不实用。 同样的,在高维空间中,k-d树也不能做很高效的最邻近搜索。一般的准则是:在k维情况下,数据点数目N应当远远大于 2 k {\displaystyle 2^{k}} 时,k-d树的最邻近搜索才可以很好的发挥其作用。不然的话,大部分的点都会被查询,最终算法效率也不会比全体查询一遍要好到哪里去。另外,如果只是需要一个足够快,且不必最优的结果,那么可以考虑使用近似邻近查询的方法。

相关

  • 国家公园管理局美国国家公园管理局(英语:National Park Service,简写NPS),是隶属于美国联邦政府的行政管理机构,负责管理美国的国家公园,国家纪念区,以及其他自然保护区和历史文化遗产。于1916年8
  • 文景之治文景之治是指中国汉朝汉文帝和汉景帝所统治的时期,是中国历史上的一个治世,奠定了其后雄才大略的汉武帝将汉朝推上顶峰的基础。汉初,社会经济薄弱,朝廷推崇黄老治术,采取“轻徭薄
  • 欧拉伯欧拉伯(Eurabia)是一个新出现的政治术语,形容一个阴谋论: 被穆斯林(在欧洲出生或移民迁入)占了人口大多数,而原有欧洲人占人口少数的未来欧洲。欧拉伯(Eurabia)由欧洲(Europe)和阿拉伯
  • 中央研究院天文及天文物理研究所中华民国中央研究院天文及天文物理研究所(Institute of Astronomy and Astrophysics, Academia Sinica,缩写为 ASIAA)是中央研究院的其中一个研究单位,前身是中央研究院在南京时
  • 登顿县登顿县(Denton County, Texas)位美国德克萨斯州北部的一个县。面积2,390平方公里。根据美国2000年人口普查,共有人口432,976人,2006年人口为584,238人。县治登顿(Denton)。成立于1
  • 南康郡南康郡,西晋至唐朝时设置的一个郡。晋武帝太康三年(282年),改孙吴所设的庐陵南部都尉为南康郡,治所赣县,属杨州。包括今江西省南康、赣县、兴国、宁都以南之地。晋惠帝元康元年,南
  • 拉希德·苏尼亚耶夫拉希德·阿利耶维奇·苏尼亚耶夫(俄语:Рашид Алиевич Сюняев,1943年3月1日-),俄国天体物理学家,鞑靼人,吸积盘理论的开拓者,并在1972年和雅可夫·泽尔多维奇一起提
  • 张检张检(1864年-?),字士封、庚易、玉叔,直隶天津府南皮人,清朝官员。光绪十四年戊子科,顺天乡试中举,十六年(1890年),张检中进士,同年五月,著主事,分部学习,分发吏部,任候补主事,后任吏部文选司郎
  • 杰克·克卢格曼杰克·克卢格曼(英语:Jack Klugman,1922年4月27日-2012年12月24日),美国老牌演员,因为在电视剧《神勇法医官(英语:Quincy, M.E.)》饰演昆西医生而闻名。曾在电影《十二怒汉》饰演第五
  • 查尔斯·维特尔查尔斯·维特尔(Charles Wittl,1971年10月5日-),一般称作查尔斯,是一名已经退役的加纳职业足球运动员,司职中场。曾入选加纳国家足球队并有一次出场纪录。