从矩阵中查找最大总和

时间:2011-10-09 07:52:46

标签: algorithm

有一个m行和n列的矩阵。任务是找到每行和每列中选择单个元素的最大总和。我想出了一个解决方案,它从整个矩阵中找到最大值,然后将该行和列设置为零,将其添加到总和中,然后继续查找下一个最大值。这重复了m次。

但这种方法的问题在于是否存在重复元素。我将尝试用一个例子来解释它。这是矩阵..

  

3 6 5 3
  9 4 9 2
  8 1 4 3
  4 7 2 5

现在,如果我按照上面的方法..总和将是9 + 7 + 5 + 3,而它应该是9 + 8 + 7 + 3.如何解决这个问题..我被卡住了

更新:列是可以分配给某人的座位成本,而行是人数。我们希望以这种方式分配它们,以便我们获得最大成本。

2 个答案:

答案 0 :(得分:3)

这不仅仅是http://en.wikipedia.org/wiki/Assignment_problem,通常由http://en.wikipedia.org/wiki/Hungarian_algorithm解决吗?显然,你想要一个最大值而不是一个最小值,但你肯定可以通过最大化成本来实现这一目标 - (实际成本),或者,如果你担心 - 成本,(矩阵中的最大成本) - (实际成本) )。

答案 1 :(得分:0)

你的算法是错误的 - 考虑矩阵的微小变化,其中第二个9是8:

3 6 5 3 
9 4 8 2 
8 1 4 3 
4 7 2 5 

然后您的算法在查找9, 7, 5, 3(没有重复项)方面没有问题,但正确答案仍为8, 8, 7, 3

你可以通过尝试所有组合来强制它。将其放入代码的一个好方法是使用递归函数,解决任何矩阵的问题:

在其中,您将遍历第一行并调用通过删除对应的行和列获得的子矩阵的函数。然后你会选择最高的金额。

对于大型矩阵来说,这当然太慢了。复杂性为O(N!)