algorithm - 如何将点重新分配/强制到网格中以使移动量最小?

标签 algorithm sorting point

我有一组 n×n 点,浮点坐标在 [0..n] 范围内。如何为集合中的每个点分配一个网格点,以便“所需的移动总和”最小化 - 不使用蛮力?

points and grid
(要最小化的总和 = 箭头长度的总和)

我想出的算法:

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.

现在,我怀疑这是一个非常标准的算法,我只是找不到合适的搜索关键字,正如您可能从我有缺陷的术语中看出的那样。

或者这应该已经是最好的方法了?

最佳答案

这是一个 Linear Programming Assignment Problem .

可以通过制作一个n*n x n*n的距离矩阵来求解,然后用Hungarian Algorithm求解。 .

通过计算每个点到每个网格位置的距离来计算距离矩阵。然后为每个点分配一个唯一的网格,以最小化总距离。匈牙利算法在多项式时间内完成。

关于algorithm - 如何将点重新分配/强制到网格中以使移动量最小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20166613/

相关文章:

algorithm - 为词性标注创建特征函数

algorithm - 在快速排序中使用中值选择?

c - 在 C 中使用函数指针的 Bubblesort 算法

path - 使用 SVG 进行 2D 渲染和放大

algorithm - 设计一个实时保持前k个频繁词的系统

c - 在节点中有多个元素的 B 树中递归查找第 k 个最小元素

java - 计算平方根和立方根的递归算法

arrays - 使用嵌套元组对数组进行排序

c# - csharp中矩形的emgucv角度检测

java - 根据一条直线的 2 个点计算一个正方形的 4 个点