我有一组n×n
点,浮点坐标在[0..n]范围内。如何为集合中的每个点分配一个网格点,以便“所需的运动总和”最小 - 不使用暴力?
(总和最小化=箭头长度的总和)
我提出的算法:
for all remaining points in the set
calculate distances to each point's nearest available grid point
place point with smallest distance on its near grid point
remove that point from the set
make grid point unavailable
repeat.
现在,我怀疑这是一个非常标准的算法,我找不到正确的搜索关键字,正如你可以从我有缺陷的术语中看出来的那样。
或者这应该是最好的方法吗?
答案 0 :(得分:0)
这是Linear Programming Assignment Problem。
可以通过将距离矩阵设为n*n x n*n
然后使用Hungarian Algorithm求解来解决此问题。
通过计算每个网格位置的每个点的距离来计算距离矩阵。然后为每个点分配一个唯一的网格,以便最小化总距离。匈牙利算法在多项式时间内完成。
答案 1 :(得分:0)
您可以计算voronoi图。然后计算平均单元格并将其用于网格。