【问题标题】:KD-Tree implementationKD-Tree 实现
【发布时间】:2014-01-27 16:43:35
【问题描述】:

我正在尝试编写自己的 KD-Tree 实现,并最终实现 kNN。而且我有点难以理解 KD-Tree 如何构建搜索树。

在维基百科上它说它找到了值的中值并将其用作树的根。

但是当有很多维度时,你将如何计算中位数?

【问题讨论】:

    标签: data-structures tree machine-learning kdtree


    【解决方案1】:

    你不会在多个维度中找到中位数(实际上,多维数字没有有意义的顺序)。在 kd 树的每一层,您都专注于一个维度。您根据这个维度选择中位数,忽略其他组件。

    请注意,您可以使用除中位数以外的许多标准,具体取决于您要执行的操作。同样,选择一个好的方案来决定每个节点的维度是一门艺术,尽管几乎每个方案都是正确的。

    【讨论】:

      【解决方案2】:

      不需要找到中位数:来自维基百科:

      另请注意,不需要选择中点。在那里面 情况下,结果很简单,无法保证树 会平衡。避免编写复杂代码的简单启发式方法 线性时间中值查找算法,或使用 O(n log n) 排序的 所有n个点,就是用sort求一个固定个数的中位数 随机选择的点作为分割平面。在实践中, 这种技术通常会产生很好的平衡树。

      KD-Tree from wikipedia

      【讨论】:

        【解决方案3】:

        您可以简单地将点按一维排序,然后选择 中位数为根,递归构造子树(其他维度排序) 这是一个实现: https://github.com/tavaresdong/cs106l/blob/master/KDTree/src/KDTree.h

        【讨论】:

          猜你喜欢
          • 2014-10-16
          • 2011-03-22
          • 2021-10-10
          • 2012-01-10
          • 1970-01-01
          • 2015-11-20
          • 2011-07-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多