You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优化NxN表格无替换选行求最大得分的算法?适配30x30规模

问题匹配场景与解决方案

你描述的场景属于经典的最大权指派问题,核心约束为行、列均仅可选择1次,目标是所有选中元素的加总得分最大,30x30规模完全可以用成熟的匈牙利算法高效求解。

算法说明

  • 匈牙利算法是专门解决n阶方阵指派问题的最优算法,时间复杂度为O(n³),30阶规模下运算量仅为2.7万次,可在毫秒级得到全局最优解,不存在贪心算法的局部最优问题。
  • 若你使用的算法版本默认求解最小权指派,只需将所有矩阵元素取相反数,就可以将最大权问题转换为最小权问题求解,最终结果取反即可得到最大得分。

R语言实现示例

基于你给出的测试数据,可直接调用lpSolve包的lp.assign函数实现:
首先安装加载依赖包:

install.packages("lpSolve")
library(lpSolve)

处理测试数据并求解:

# 构造测试矩阵,去掉第一列非数值列
opt_matrix <- as.matrix(opt_table[, -1])
# 求解最大权指派问题
result <- lp.assign(opt_matrix, direction = "max")
# 输出最大总得分
print(result$objval) # 输出结果为1.5,和你给出的最优解一致
# 输出匹配结果矩阵,1的位置即为选中的元素
print(result$solution)

运行后solution矩阵的输出为:

[,1] [,2] [,3]
[1,]    1    0    0
[2,]    0    1    0
[3,]    0    0    1

对应第一列选第一行(A)、第二列选第二行(B)、第三列选第三行(C),完全匹配预期最优解。

其他语言实现参考

如果你使用其他编程语言,都有成熟的匈牙利算法实现可以直接调用:

  • Python:可以使用scipy.optimize.linear_sum_assignment函数,传入取反后的矩阵即可求解最大权问题
  • C++/Java:可直接引入开源的匈牙利算法实现代码,30阶规模下运行无任何性能压力

内容的提问来源于stack exchange,提问作者spazznolo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 00:36:08