Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 给定2d矩阵,求元素的最小和,以便从每行和每列中选择一个元素?_Algorithm_Graph Algorithm_Hungarian Algorithm - Fatal编程技术网

Algorithm 给定2d矩阵,求元素的最小和,以便从每行和每列中选择一个元素?

Algorithm 给定2d矩阵,求元素的最小和,以便从每行和每列中选择一个元素?,algorithm,graph-algorithm,hungarian-algorithm,Algorithm,Graph Algorithm,Hungarian Algorithm,求n*n 2D矩阵元素的最小和,这样我就必须从每行和每列中选择一个元素,而且只能选择一个元素? 乙二醇 如果我从行1中选择4,我不能从行1中选择12,也不能从列1中选择, 我只能从第2行第2列中选择6 同样地,最小和应该是4+6=10,其中6来自第二行第二列 而不是6+12=18,其中6来自第二行第一列 此外,不允许使用4+12,因为两者都来自同一行 我想到了暴力,一旦我从行和列中选择元素,我就不能再选择另一个,但这种方法是O(n!) .定理:如果一个数字被加到或从中减去 矩阵中任何一行或一列的

求n*n 2D矩阵元素的最小和,这样我就必须从每行和每列中选择一个元素,而且只能选择一个元素? 乙二醇

如果我从行
1
中选择
4
,我不能从行
1
中选择
12
,也不能从列
1
中选择, 我只能从第2行第2列中选择6

同样地,最小和应该是
4+6=10
,其中
6
来自第二行第二列

而不是
6+12=18
,其中
6
来自第二行第一列

此外,不允许使用
4+12
,因为两者都来自同一行

我想到了暴力,一旦我从行和列中选择元素,我就不能再选择另一个,但这种方法是
O(n!)

.

定理:如果一个数字被加到或从中减去 矩阵中任何一行或一列的条目, 然后选择元素,以获得结果矩阵所需的最小和 选择相同的元素以获得原始矩阵所需的最小和

(问题的特殊情况)使用此定理选择满足问题中给定约束的元素:

  • 从每行的所有条目中减去每行中最小的条目 划船
  • 从所有条目中减去每列中最小的条目 它的专栏
  • 通过适当的行和列绘制线,以便所有 成本矩阵中包含零个条目,并且 使用这样的线路
  • 最佳性测试
    我如果最小覆盖线数为n,则可以进行最佳零分配,我们就完成了。
    二,。如果覆盖线的最小数目小于n,则最优 还不可能指定零。在这种情况下,转至步骤5
  • 确定任何行未包含的最小条目。减去 从每个未覆盖行中删除此条目,然后将其添加到每个已覆盖行中 专栏。返回到步骤3
  • 请参阅以获得更好的理解


    详细解释了O(n4)(易于快速实现)和O(n3)(更难实现)的实现。

    看看匈牙利的分配问题算法。
    4  12 
    
    6  6