【问题标题】:minimum distance between 2 points in c++c++中两点之间的最小距离
【发布时间】:2011-05-28 14:07:12
【问题描述】:

我有 m 个地方(x,y 坐标)。

我有 n 个请求寻找到给定点 P(x,y) 的最近位置; (最小欧几里得距离)

如何在 O(n*m) 以下解决这个问题,其中 n 是请求数,m 是位置数?我可以使用平方欧几里得距离,但它仍然是 n*m。

【问题讨论】:

  • 这是作业吗?如果是的话请+homework标签。
  • (插入了一个“?”,所以人们不要将其关闭为“不是一个真正的问题”)。

标签: c++ complexity-theory time-complexity euclidean-distance


【解决方案1】:

试试kd-tree。可以在here 找到高性能库实现。

注意:我指的是针对高维度优化的近似最近邻搜索。这对您的应用程序来说可能有点矫枉过正。

编辑:

对于二维 kd-tree,构建时间为 O(m*log(m)),查询时间为 O(n*sqrt(m))。如果您的查询数 n 超过 log(m),这应该最终会胜过简单的解决方案。

该库意味着您不必实现它,因此复杂性应该不是问题。

如果您想推广到高维极速查询,请查看locality sensitive hashing

【讨论】:

  • 我仍然不明白这如何降低复杂性。构建kd树似乎很难
【解决方案2】:

有趣。为了减少 n 的影响,我想知道在您遇到并处理它时保存每个请求的结果是否会有所帮助。一个聪明的结果表可能会缩短在解决后续请求时计算 sqrt(x2 + y2) 的需要。

【讨论】:

    【解决方案3】:

    Nearest-Neighbor-Problem,嗯?我发现Robert Sedgewick Std Book 在这些情况下非常有用。他也描述了Nearest Neighbour Search

    【讨论】:

      猜你喜欢
      • 2021-10-24
      • 1970-01-01
      • 2016-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-30
      • 1970-01-01
      相关资源
      最近更新 更多