K-D树和暴力之间的比较搜索时间

时间:2018-05-27 11:55:33

标签: algorithm brute-force kdtree

enter image description here

这是根据我写的k-d树和蛮力的维度执行速度的图表。 指针集的数量固定为1 M(1,000,000),Query测量的速度为1000次。 k - d树的增加是巨大的,但蛮力不是。 我想知道为什么会出现这些结果以及如何改进它们。

1 个答案:

答案 0 :(得分:0)

一些想法:

  • 性能可能很大程度上取决于数据的特征。例如,数据点是均匀分布,聚类还是以其他方式排列?

  • 此外,您正在执行的查询类型是什么?一种解释是您正在使用窗口查询返回整个点集或其大部分。在这种情况下,蛮力总是会更快。

  • KD-Tree实施中是否存在缺陷?

通常,已知kD-Tree在高维度下不能很好地扩展。因此,例如在机器学习中,维度通常会降低到10到20左右。但是,除非你在GPU上做暴力,否则KD-Tree应该更快。

如果您正在寻找具有高维度(插入/窗口查询)更好扩展的结构,请查看R*TreesPH-Tree(后者是自我广告,目前仅限于60个尺寸,但本周将发布高调版本)。对于k最近邻搜索,请查看CoverTreesBallTrees。如果您使用的是Java,可以查看my repo中的实现。我还实现了R*Tree here