use*_*205 4 algorithm graph-algorithm hungarian-algorithm
找到 n*n 2D 矩阵的元素的最小总和,这样我必须从每一行和每列中选择一个且仅一个元素?例如
4 12
6 6
Run Code Online (Sandbox Code Playgroud)
如果我4从 row 中选择,1我不能12从 row1 也从 column 中1选择,我只能从第 2 行第 2 列中选择 6。
所以,同样的最低金额是4 + 6 = 10其中6从第二行第二列
而不是6 + 12 = 18其中6是从第二行第一列
也4 + 12不允许,因为两者都来自同一行
我想到了蛮力,一旦我从行和列中选择元素,我就无法选择另一个,但这种方法是O(n!)
.
定理:如果在矩阵的任何一行或一列的所有条目中添加或减去一个数字,则为获得结果矩阵所需的最小总和而选择的元素与为获得原始矩阵所需的最小总和而选择的元素相同矩阵。
在匈牙利算法(特例最小代价流问题)使用此定理来选择那些满足于您的问题给定的约束因素:
请参阅此示例以更好地理解。
此处详细解释了O(n 4 )(易于实现且快速实现)和 O(n 3 )(较难实现)的实现。
| 归档时间: |
|
| 查看次数: |
3823 次 |
| 最近记录: |