kd-tree和r-tree的区别
参考网址: https://qa.1r1g.com/sf/ask/302843271/
参考网址:https://www.codenong.com/4326332/
它们实际上是完全不同的.它们具有相似的用途(对空间数据进行区域查询),它们都是树木,但这就是它们的共同点.
- R树是平衡的,kd树不是(除非是大量装载).这就是R树更改数据的首选原因,因为可能需要重建kd树以进行重新优化.
- R-Trees是面向磁盘的.它们实际上在直接映射到磁盘表示的区域中组织数据.这使它们在真实数据库和内存不足操作中更有用.kd-tree是面向内存的,并且放入磁盘页面并不重要
- R-Trees不覆盖整个数据空间.可以揭开空白区域.kd-trees总是覆盖整个空间.
- kd-trees 二进制分割数据空间,r-trees将数据分割成矩形.二进制分裂显然是不相交的; 而r树的矩形可能重叠(实际上有时是好的,尽管有人试图最小化重叠)
- kd-tree在内存中更容易实现,这实际上是它们的关键优势
- R树可以存储矩形和多边形,kd树只存储点矢量(多边形需要重叠)
- R-tree具有各种优化策略,不同的分割,批量加载,插入和重新插入策略等.
R树和k d树基于类似的想法(基于轴对齐区域的空间划分),但关键区别是:
- k中的节点 d树中的表示分离平面,而R树中的节点表示边界框.
- k d-trees将整个空间划分为区域,而R-tree仅划分包含感兴趣点的空间子集.
- k个 d树表示不相交的分区(点仅属于一个区域),而R树中的区域可以重叠.
(分区空间有很多类似的树结构:四叉树,BSP树,R*树等等)
这个答案中没有提到的两者之间的主要区别是KD树只在批量加载情况下有效.一旦构建,修改或重新平衡KD树是非常重要的.R树不会受此影响.
它们实际上是完全不同的。它们的作用类似(对空间数据进行区域查询),它们都是树(都属于边界体积层次结构索引家族),但这就是它们的共同点。
- R树是平衡的,k树不是平衡的(除非批量加载)。这就是为什么使用R树来更改数据的原因,因为可能需要重建k d树才能进行重新优化。
- R树是面向磁盘的。他们实际上是在直接映射到磁盘表示形式的区域中组织数据。这使它们在实际数据库和内存不足操作中更加有用。 k-d树面向内存,可轻松放入磁盘页面
- 批量加载时,k-d树很优雅(赞扬SingleNegationElimination指出了这一点),而R树则更适合更改数据(尽管与静态数据一起使用时它们确实受益于批量加载)。
- R树无法覆盖整个数据空间。可能会发现空白区域。 k-d树始终覆盖整个空间。
- k-d-trees二进制分割数据空间,R-trees将数据分割成矩形。二进制拆分显然是不相交的。而R树的矩形可能会重叠(虽然有时会尽量减少重叠,但这实际上有时是好的)
- k-d树在内存中更容易实现,这实际上是它们的主要优势
- R树可以存储矩形和多边形,k树仅存储点向量(因为多边形需要重叠)
- R树具有各种优化策略,不同的拆分,批量加载器,插入和重新插入策略等。
- k-d树以到分离超平面的一维距离为界; R树使用到边界超矩形的d维最小距离作为边界(对于某些计数查询,它们也可以使用最大距离,以过滤出真实的正数)。
- k-d树支持平方的欧几里得距离和Minkowski范数,而Rtrees也被证明也支持大地距离(用于在地理数据上查找近点)。
R树和kd树基于类似的思想(基于轴对齐区域的空间划分),但主要区别在于:
- kd树中的节点表示分离平面,而R树中的节点表示边界框。
- kd树将整个空间划分为区域,而R树仅将包含关注点的空间子集划分。
- kd树表示不相交的分区(点仅属于一个区域),而R树中的区域可能重叠。
答案中未提及的两者之间的主要区别在于,KD树仅在批量加载情况下有效。构建后,修改或重新平衡KD树是不平凡的。 R树不会因此受到影响。
平凡问题通常指规模小,或简单,或计算复杂性低的问题;不平凡问题则是指规模大,或复杂困难,或计算复杂性高的问题。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律