对于以下问题,我有一个贪心的解决方案。我想知道如何证明它?
问题如下:给定 n x n 非负整数的二维矩阵,找到三个单元格,使得这些单元格和相邻单元格的总和为越多越好。如果两个选定的单元具有共同的相邻单元,则相邻单元仅在和中参与一次,如果它们共享共同边,则认为两个单元相邻。
幼蛮强力溶液以 O(n 6 )运行。我写了一个贪婪的解决方案,运行在 O(n 4 )。贪婪的解决方案使用这种观点,即具有自身及其相邻单元的最大总和的单元始终是答案的一部分。我已经在几个测试用例中测试了两种解决方案,结果是相同的。
在贪婪算法中,首先我选择具有自身和相邻单元格总和最大值的单元格,然后遍历所有可能的单元格对。
现在我的问题是,为什么这种贪婪的策略有效?我想要证明。谢谢!
答案 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