【问题标题】:Comparison search time between K-D tree and Brute-forceK-D树和Brute-force比较搜索时间
【发布时间】:2018-05-28 19:01:11
【问题描述】:

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

【问题讨论】:

  • 您是否将 kd-tree 创建时间作为基准测试的一部分进行测量?
  • 不,这只是我的学术好奇心。
  • 什么语言?任何测试示例代码?什么数据字段和构造算法,特别是分裂启发式?

标签: algorithm brute-force kdtree


【解决方案1】:

一些想法:

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

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

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

众所周知,kD-Trees 在高维时不能很好地扩展。因此,例如在机器学习中,维数通常会降低到 10 到 20 左右。但是,除非您在 GPU 上进行暴力破解,否则 KD-Tree 应该更快。

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

【讨论】:

    猜你喜欢
    • 2017-07-06
    • 1970-01-01
    • 2012-11-10
    • 1970-01-01
    • 2011-10-23
    • 1970-01-01
    • 1970-01-01
    • 2020-04-15
    • 1970-01-01
    相关资源
    最近更新 更多