【问题标题】:Nearest neighbour search on graphics hardware图形硬件上的最近邻搜索
【发布时间】:2013-03-15 09:03:00
【问题描述】:

鉴于二维空间中的大量点 (float64)...

有没有办法使用 OpenGL 或 DirectX 的特性来确定最近邻?

我已经实现了一个 kd-tree,但速度仍然不够快。

【问题讨论】:

标签: c++ algorithm opengl directx


【解决方案1】:

kd-tree应该可以正常工作。但这里有一些提示。

我曾经为一百万点数据集实现过一次 kd-tree。以下是我从中学到的:

您是否尝试过分析您的代码?您可能会发现可以进行一些简单的优化,例如需要强制内联的常用辅助函数。

您是否真的测试过您的代码,以验证它是否正在剔除容易识别为“太远”的分区的树枝。如果你不小心,你很容易遇到一个错误,它会在太远的点上进行不必要的距离计算。

最简单的事情:在比较点之间的线性距离时,您不需要取 (x2-x1)*(y2-y1) 的 SQRT。

在我的代码中花费的大部分时间只是从原始数据集构建树,包括每次迭代中的多个完整排序,以决定哪个轴是最好的分区。一个更简单的算法是在每个树枝的 x 轴和 y 轴上的分区之间交替,并缓存每个轴的排序顺序。它可能无法构建最优化的搜索树,但总体节省的成本可能是巨大的。

【讨论】:

    猜你喜欢
    • 2018-06-16
    • 1970-01-01
    • 2012-04-15
    • 2012-09-16
    • 1970-01-01
    • 2018-01-06
    • 1970-01-01
    • 2015-03-17
    • 2013-08-22
    相关资源
    最近更新 更多