【发布时间】:2011-07-22 14:46:46
【问题描述】:
我出于好奇而问这个问题,因为我快速而肮脏的实现似乎已经足够好了。不过我很好奇什么是更好的实现方式。
我有一张真实世界数据的图表。没有重复的 X 值,并且 X 值在整个图表中以一致的速率递增,但 Y 数据基于真实世界的输出。我想以编程方式从任意给定点 P 找到图形上最近的点。我正在尝试找到一种有效(即快速)的算法来执行此操作。我不需要确切的最近点,我可以选择一个“接近”最近点的点。
明显的惰性解决方案是通过图中的每个点递增,计算距离,然后找到距离的最小值。然而,理论上这对于大图可能会很慢;我想要的太慢了。
由于我只需要一个近似的最近点,我想理想的最快方程将涉及生成最佳拟合线并使用该线实时计算该点的位置;但这听起来像是一个潜在的数学难题,我不打算承担。
我的解决方案是一个 hack,它之所以有效,是因为我假设我的点 P 不是任意的,即我假设 P 通常会靠近我的图形线,当这种情况发生时,我可以从考虑中划掉远处的 X 值。我计算与 P 共享 X 坐标的线上的点有多接近,并使用该点与 P 之间的距离来计算可能是更接近点的最大/最小 X 值。
我不禁觉得应该有一个比我的解决方案更快的算法(这只是有用的,因为我假设 99% 的时间我的点 P 将是一个接近线的点)。我尝试在谷歌上搜索更好的算法,但发现很多算法不太适合,以至于在所有不合适的算法的混乱中很难找到我正在寻找的东西。那么,这里有没有人有一个更有效的建议算法?请记住,我不需要完整的算法,因为我已经满足了我的需求,我只是好奇正确的解决方案是什么。
【问题讨论】:
标签: algorithm computational-geometry