【发布时间】:2011-08-05 22:46:37
【问题描述】:
如this article 所述,我已经实现了匈牙利算法,这是一种分配问题的解决方案,但它在百分之几的随机成本矩阵上失败了。
我已经花了数周时间调试它(我是在问this question 时开始的,虽然不是全职)。我采用了算法失败的随机成本矩阵,并用好的旧笔和纸执行了算法,并将其与我的实现进行了比较,看看出了什么问题。这导致我发现了一些我现在已经纠正的错误,但是我遇到了一个例子,当我手动解决它时我没有得到正确的解决方案。对于任何感兴趣的人:该示例的成本矩阵是{{0,6,4,3},{3,2,1,2},{0,7,6,4},{3,8,5,3}},其正确解决方案的总和为9=4+2+0+3(按此顺序)。在那个例子中,最终有一条匹配的边不在等式子图上,我认为这是不可能的,表明有问题。
要么我不完全理解解决方案,这是一个可行的选择,要么是所提供解决方案中的一个非常微妙的错误,我将在下面详细说明。
我意识到我必须介绍一些术语,但由于这是一个详细的问题,我不会详细解释所有概念,因为任何需要解释的人可能都无法回答我的问题。
- 问题的输入是一个加权完全二分图,每个分区上有
n个节点。 - 提出的方法指定查找
n扩充路径。 - 增广路径是在不匹配节点处开始和结束的交替路径。
- 交替路径是在相等子图上匹配的和不匹配的边之间交替的路径。
- 这些交替路径以广度优先的方式增长,仅在以下任一情况下才会停止:
- 找到增广路径或
- 交替路径无法再进一步扩展。
- 还有一个关于可能存在的错误的关键事实:算法会记住交替路径遇到的节点,这会在与该问题无关的部分影响算法。
当找到增强路径时,所提出的方法会停止增长交替路径。我相信这是不正确的。我认为所有交替路径都需要增长到找到的增强路径的成本。请注意,交替路径以广度优先方式增长,因此这只增长成本可以与找到的路径相关的路径。这个微小的变化可能会导致某些节点被标记为“通过交替路径访问”,否则这些节点不会被标记,这会进一步影响算法。
实际问题: 我是否应该考虑交替路径的成本等于探索的增强路径(并从同一节点开始)的成本?这与所提出的方法相反,该方法说一旦找到增强路径就停止,而不管成本与其他路径有任何联系。
【问题讨论】:
标签: algorithm graph variable-assignment graph-algorithm