1维排序数组:KD-Tree与二进制搜索

时间:2018-03-22 08:55:06

标签: arrays algorithm tree

只是为了验证,我是否正确,如果:

  • 我有一个已排序,一维数组。
  • 使用KD-Tree进行最近邻搜索的速度总是与在该阵列上使用二进制搜索一样快? (对于正常搜索当然相同)
  • 范围搜索也是如此(获取范围x..y中的所有元素)。
  • 我可能对KD-Tree的唯一好处是频繁插入/删除数据。

一般要求二叉树和N维度,但我想知道 KD-Tree 1 特别是维度数据。

1 个答案:

答案 0 :(得分:2)

  

使用KD-Tree进行最近邻搜索的速度总是与在该阵列上使用二进制搜索一样快? (对于正常搜索当然相同)

正确。如果KD-Tree稍微退化(通过更新操作),你的情况会更糟。

  

范围搜索也是如此(获取范围x..y中的所有元素)。

正确。一旦用二进制搜索找到大于x的最小值,你就可以扫描直到你达到y。在KD树中,您必须遍历范围内的键所在的所有节点。

  

我可能拥有KD-Tree的唯一优势就是有了   频繁插入/删除数据。

这取决于你的优势。

KD-Trees中的插入和删除比排序数组更快。

然而,由于KD树将退化(如果您仅使用基本KD树而不对更新进行调整),KD树上的搜索将变得更慢,因为更多的插入/删除。二进制搜索将保持在O(log n)。

不是您的问题,但是,如果您使用的是1D,那么您很可能会同时使用Red-Black TreesB+-Trees或类似的两个世界中最好的一个。