Maximize sum of table where each number must come from unique row and column

后端 未结 2 1658
滥情空心
滥情空心 2020-12-28 09:35

Suppose we have a table of numbers like this (we can assume it is a square table):

20  2   1   3   4
5   1   14  8   9
15  12  17  17  11
16  1   1   15  18
         


        
相关标签:
2条回答
  • 2020-12-28 10:27

    For starters, you can use dynamic programming.

    In your straightforward approach, you are doing exactly the same computation many, many times.

    For example, at some point you answer the question: "For the last three columns with rows 1 and 2 already taken, how do I maximize the sum?" You compute the answer to this question twice, once when you pick row 1 from column 1 and row 2 from column 2, and once when you pick them vice-versa.

    So don't do that. Cache the answer -- and also cache all similar answers to all similar questions -- and re-use them.

    I do not have time right now to analyze the running time of this approach. I think it is O(2^n) or thereabouts. More later maybe...

    0 讨论(0)
  • 2020-12-28 10:39

    This is the maximum cost bipartite matching problem. The classical way to solve it is by using the Hungarian algorithm.

    Basically you have a bipartite graph: the left set is the rows and the right set is the columns. Each edge from row i to column j has cost matrix[i, j]. Find the matching that maximizes the costs.

    0 讨论(0)
提交回复
热议问题