首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用匈牙利算法求解分配问题的第二最佳解

使用匈牙利算法求解分配问题的第二最佳解
EN

Stack Overflow用户
提问于 2013-12-01 17:25:34
回答 2查看 2.5K关注 0票数 3

为了在赋值问题中找到最优解,使用匈牙利算法很容易。例如:

代码语言:javascript
运行
复制
A |  3  4  2
B |  8  9  1
C |  7  9  5

当对此使用匈牙利算法时,您将变成:

代码语言:javascript
运行
复制
A |  0  0  1
B |  5  5  0
C |  0  1  0

这意味着A被分配给' job‘2,B分配给作业3,C分配给作业1。然而,我想找到第二个最好的解决方案,这意味着我想要一个成本比最优解的成本更高的最佳解决方案。根据我的观点,我只需要在最后一个矩阵中找到最小和的赋值,而不是和最优一样。我只需在树中搜索(通过修剪)就可以做到这一点,但我担心复杂性(是O(n!))。我不知道有什么有效的方法吗?

我正在考虑一种搜索,首先对行进行排序,然后贪婪地首先选择最低的成本,假设最低成本中的大部分将弥补最小和+剪枝。但是假设匈牙利算法能产生一个大量的零矩阵,那么它的复杂度又是非常糟糕的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-02 17:34:49

你所描述的是K最佳作业问题的一个特例--事实上,KattaG.Murty在1968年的"一种按成本增加的顺序排列所有赋值的算法。“运筹学研究16(3):682-687中提出了这个问题的解决方案。

看起来实际上有相当数量的实现,至少在Java和Matlab中是这样的,可以在web上使用(参见这里)。

票数 4
EN

Stack Overflow用户

发布于 2019-05-26 09:01:12

R中,现在在muRty包中实现了Murty的算法。

克拉恩

GitHub

它包括:

  • 最小和最大方向的优化;
  • 按等级输出(类似于SQL中的密集秩)
  • 使用匈牙利算法(在clue中实现)或线性规划(在lpSolve中实现)来求解初始赋值。

免责声明:我是这个软件包的作者。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20314996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档