代码之家  ›  专栏  ›  技术社区  ›  James Thompson

我可以使用任意度量来搜索kd树吗?

  •  8
  • James Thompson  · 技术社区  · 16 年前

    我刚刚完成了一个 kd-tree 做快速的近邻搜索。我对使用不同的距离指标感兴趣,除了 Euclidean distance . 我对kd树的理解是,如果度量是非欧几里得的,快速的kd树搜索不能保证给出精确的搜索,这意味着如果我想尝试新的搜索度量,我可能需要实现一个新的数据结构和搜索算法。

    我有两个问题:

    1. 是否使用 kd树 永远把我绑在 欧几里得距离 ?
    2. 如果是这样的话,我应该尝试其他哪种算法 metrics ?我没有太多的时间来实现许多不同的数据结构,但是我正在考虑的其他结构包括 cover trees vp-trees .
    2 回复  |  直到 16 年前
        1
  •  8
  •   j_random_hacker    16 年前

    如果您用给定度量的等效几何对象替换“超球体”,并测试每个超平面是否与此对象交叉,那么链接到的维基百科页面上描述的最近邻搜索过程当然可以概括为其他距离度量。

    示例:如果您使用曼哈顿距离(即矢量分量中所有差异的绝对值之和),您的超球体将成为(多维)菱形。(这在2d中最容易可视化——如果你当前最近的邻居在远处 X 从查询点 ,则不同超平面后面的任何近邻必须与宽度和高度为2x且位于中心的菱形相交。 )。这可能会使超平面交叉测试更难编码或运行更慢,但一般原则仍然适用。

        2
  •  4
  •   Nick Johnson    16 年前

    我不认为你和欧几里得距离有联系——正如J_Random_Hacker所说,你可能可以使用曼哈顿距离——但我很确定你和可以用笛卡尔坐标表示的几何体有联系。例如,您不能使用kd树来索引度量空间。