Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 求矩阵中三个总和最大的单元格_Algorithm_Matrix_Brute Force_Greedy - Fatal编程技术网

Algorithm 求矩阵中三个总和最大的单元格

Algorithm 求矩阵中三个总和最大的单元格,algorithm,matrix,brute-force,greedy,Algorithm,Matrix,Brute Force,Greedy,对于下面的问题,我有一个贪婪的解决方案。我想知道如何证明它 问题如下:给定一个由非负整数组成的nx2d矩阵,找出三个单元格,使这些单元格和相邻单元格的总和尽可能大。如果两个选定的单元格具有共同的相邻单元格,则相邻单元格仅参与一次求和,如果两个单元格共享一条共同边,则视为相邻 朴素的暴力解决方案在O(n6)中运行。我编写了一个贪婪的解决方案,它在O(n4)中运行。贪婪的解决方案使用了这样一种思想,即自身和相邻单元的总和最大的单元总是答案的一部分。我已经在几个测试用例上测试了这两种解决方案,结果是相

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

问题如下:给定一个由非负整数组成的nx2d矩阵,找出三个单元格,使这些单元格和相邻单元格的总和尽可能大。如果两个选定的单元格具有共同的相邻单元格,则相邻单元格仅参与一次求和,如果两个单元格共享一条共同边,则视为相邻

朴素的暴力解决方案在O(n6)中运行。我编写了一个贪婪的解决方案,它在O(n4)中运行。贪婪的解决方案使用了这样一种思想,即自身和相邻单元的总和最大的单元总是答案的一部分。我已经在几个测试用例上测试了这两种解决方案,结果是相同的

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


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

它不起作用。对不起

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
自身和所有相邻单元的总和最高。然而,选择3个值为
2
的单元格实际上是最好的

编辑

很明显你说的“相邻”和我的意思不同。因此,请尝试以下示例:

 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

听起来你可以用大小相等的第二个矩阵来进一步抽象矩阵,其中单元格的值等于所有相邻单元格的总和。然后,从那里,你可以找到3个最大的卖点,它们彼此不相邻,不是吗?@fallereneaper no。有时候我们应该选择相邻的单元格。我想我把问题解释得很糟糕。我必须将“每个单元格只能参与一次求和”的语句编辑为“如果两个选定的单元格有共同的相邻单元格,则相邻单元格只能参与一次求和”。这更有意义。问题就变成了:你应该自己建立一个模型。我们可以想出答案,但我们不想无意中帮你做作业。@fallerenreaper这不是作业。不。挑两个会得到210。答案是329。选择单元格(2,3)、(2,5)和(5,4)将得到329。单元格(2,3)自身和所有相邻单元格的总和最高。@Chloe相邻是什么意思?我将其计算为“任意方向1”,这使其成为9个单元的块,“我可以更新示例,以使用不同的相邻单元定义来中断。