找到n * n 2D矩阵的元素的最小和,这样我必须从每一行和每列中选择一个且只有一个元素? 例如
4 12
6 6
如果我从行4
中选择1
,我也无法从列12
中选择1
,也可以从列1
中选择4 + 6 = 10
,
我只能从第2行第2列中选择6。
同样,最小总和为6
,其中6 + 12 = 18
来自第二行第二列
而非6
其中4 + 12
来自第二行第一列
也不允许O(n!)
,因为两者都来自同一行
我想到了蛮力,一旦我从行和列中选择元素,我就无法选择另一个,但这种方法是setTimeout
答案 0 :(得分:4)
定理:如果在所有数字中添加或减去数字 矩阵的任何一行或一列的条目, 然后选择元素以获得所得矩阵的所需最小和 是选择相同的元素来获得原始矩阵所需的最小总和。
Hungarian Algorithm(min-cost flow问题的特例)使用此定理来选择满足问题中给出的约束的元素:
有关更好的理解,请参阅this example。
O(n 4 )(容易且快速实施)和O(n 3 )(更难实施)实现详细解释here。