在矩阵中查找具有最大总和

时间:2018-05-29 20:35:01

标签: algorithm matrix brute-force greedy

对于以下问题,我有一个贪心的解决方案。我想知道如何证明它?

问题如下:给定 n x n 非负整数的二维矩阵,找到三个单元格,使得这些单元格和相邻单元格的总和为越多越好。如果两个选定的单元具有共同的相邻单元,则相邻单元仅在和中参与一次,如果它们共享共同边,则认为两个单元相邻。

幼蛮强力溶液以 O(n 6 运行。我写了一个贪婪的解决方案,运行在 O(n 4 。贪婪的解决方案使用这种观点,即具有自身及其相邻单元的最大总和的单元始终是答案的一部分。我已经在几个测试用例中测试了两种解决方案,结果是相同的。

在贪婪算法中,首先我选择具有自身和相邻单元格总和最大值的单元格,然后遍历所有可能的单元格对。

现在我的问题是,为什么这种贪婪的策略有效?我想要证明。谢谢!

1 个答案:

答案 0 :(得分:1)

它不起作用。对不起,

20  1 40  1 40  1 20
20  2 40  3 40  2 20
20  1 40  1 40  1 20
 1  1 20 20 20  1  1
 1  1 20  2 20  1  1
 1  1 20 20 20  1  1

3具有自身和所有相邻单元格的最高总和。然而,选择值为2的3个单元格实际上是最佳的。

修改

显然你的意思是“相邻”与我不同。所以试试这个例子:

 1  1  1  1  1  1  1
20  2 40  3 40  2 20
 1  1  1 20  1  1  1
 1  1 20  2 20  1  1
 1  1  1 20  1  1  1
 1  1  1  1  1  1  1