【问题标题】:determining the distance between points in n-dimensions确定 n 维中点之间的距离
【发布时间】:2009-10-04 04:38:27
【问题描述】:

我正在构建一个 mySQL 表,列出 n 维中的点,每个维度都被索引。给定 n 维系统中的任何点,我希望能够按照与所选点的距离顺序输出所有其他点。

一个简单的解决方案是使用勾股定理计算到每个点的距离... sqrt(x^2+y^2)=z。我一直在寻找更有效的方法。只需要大概的顺序,所以我很开放。

谢谢。

-diddle

【问题讨论】:

  • 看来我应该注意到我正在寻找一种完全避免毕达哥拉斯方法的方法。我认为它会涉及到索引列和某种形式的高级连接或数据库理论,我没有遇到过。

标签: mysql performance distance multidimensional-array n-dimensional


【解决方案1】:

这种事情的一种常用技术是考虑平方距离而不是消除平方根的实际距离,但是,如果我正确理解了这个问题,你不需要从你的指数。在这种情况下,您可以只使用每个组件的绝对值之和。

【讨论】:

  • 不。对绝对值求和并不是欧几里得意义上的“距离”度量。 (您说的是距离的“1-范数”度量。)不过,您存储/比较正方形是对的,这很好。
  • 是的,正方形看起来很适合比较,谢谢。应该有助于减少一些开销。
【解决方案2】:

除了给出的内容外,您还可以考虑“分箱”您的点 - 即(至少在心理上)在您的“地图”上绘制一个网格,并根据它们落入哪个方格来跟踪点。基本上,您从同一个正方形中的点开始,然后是围绕所选点正方形的“环”中的点,然后是下一个环向外,依此类推。根据您使用的网格大小,您可以根据自己的喜好将其设为精确或近似。当然,2D 网格是针对 2D 点的——如果有更多维度,则必须增加网格的维度来匹配。

【讨论】: