如何在矩阵中添加数字以产生最小结果
How to Add Numbers in a Matrix to Yield Minimum Result?
这更多的是一个算法/数学问题,但我希望用C++实现一个解决方案。
假设我有一个这样的矩阵,其中点表示整数:
W X Y Z
A . . . .
B . . . .
C . . . .
D . . . .
如果我必须从每列中选择一个数字,使得每行最多有一个数字的话,我该如何得到最小的结果?
例如,我可以选择AW BX CY DZ
或AZ BX CY DW
,但不能选择AW BW CZ DZ
蛮力的方法似乎需要n!计算。有更快的方法吗?最后,我想在大小为~60的矩阵中添加数字。
此外,所有数字的范围从0到256。
如果你不想自己编写代码,你可以随时使用别人的辛勤工作和善意的出版物。Haskell的这个在我的旧笔记本电脑上用不到十分之二秒的时间解决了一个60x60的随机矩阵。多么棒的算法!
import Data.Algorithm.Munkres
import Data.Array.Unboxed
import Data.List (transpose)
solve n matrix =
hungarianMethodInt (listArray ((1,1),(n,n)) $ concat $ transpose matrix)
相关文章:
- C++ 检查结果数组中有多少次数字
- Spirit X3:自定义数字解析器在结果中产生意外的前导零
- 如果一个字符,比如说"9",我减去"0",我在结果上使用 is 数字,我是真还是假
- 递归推动POP POSTFIX计算器无法正确执行操作,只需将最后一个数字作为结果
- 编写二进制数字时出乎意料的结果[C ]
- 将零附加到数字时,无符号数字会显示不同的结果
- 检查数字在C 中未返回正确结果的功能
- 对 3 个数字进行排序会产生奇怪的结果 (C++)
- C++,打开和编辑文本文件中的数字数据,并将结果放入新文件中
- C++ 尝试将数字右移 32 会得到两种不同的结果
- 测试结果乘加减除法可能为一组数字
- 为什么当我将 tolower() 的结果流式传输到 std::cout 时我会得到一个数字,而当我使用 putchar(
- 相同数字计算的怪异结果差异
- C++:输出文件中ASCII字符计数频率的结果时出现的奇怪数字
- 我有n个空格,在每个空格中,我可以放置一个数字0到m.编写一个程序来输出所有可能的结果.需要帮助:)
- 将 rand() 结果写入 C++ 文本文件,而不重复数字
- visual c++中,没有编译器优化的数字代码会给出错误的结果
- 查找数字的因子.没有得到准确的结果
- 打印浮点数字4.5e-45f、4.8e-45f和5.1e-45f会返回奇怪的结果
- Tesseract API,白名单设置为数字,但结果中会出现字母