【问题标题】:Finding three cells in a matrix with maximum total sum在矩阵中找到三个总和最大的单元格
【发布时间】:2018-05-29 20:35:01
【问题描述】:

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

问题如下:给定一个 n x n 非负整数的 2D 矩阵,找到三个单元格,使得这些单元格和相邻单元格的总和为越多越好。如果两个被选中的单元格有共同的相邻单元格,则相邻单元格只参与一次求和,如果两个单元格共享一条公共边,则认为两个单元格相邻。

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

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

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

【问题讨论】:

  • 听起来你可以进一步抽象矩阵,第二个矩阵大小相同,其中单元格的值等于所有相邻单元格的总和。然后从那里,您可以找到彼此不相邻的 3 个最大的销售,不是吗?
  • @Fallenreaper 否。有时我们应该选择相邻的单元格。我想我把问题解释得不好。我必须将语句“每个单元格只能参与一次总和”编辑为“如果两个选定的单元格具有共同的相邻单元格,则相邻单元格只能参与一次总和”。
  • 这更有意义。那么问题就变成了:你应该自己建立一个模型。我们可以想出答案,但我们不想在不经意间为你做功课。
  • @Fallenreaper 这不是家庭作业。

标签: algorithm matrix brute-force greedy


【解决方案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

【讨论】:

  • 没有。选择两个将得到 210。答案是 329。
  • 选择单元格 (2,3)、(2,5) 和 (5,4) 将得到 329。单元格 (2,3) 的自身和所有相邻单元格的总和最高.
  • @Chloe 相邻是什么意思?我将它计算为“任何方向的 1 个方向”,这使它成为一个由 9 个单元组成的块。”我可以更新示例以打破相邻的不同定义。
猜你喜欢
  • 1970-01-01
  • 2015-05-09
  • 2015-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-11
  • 1970-01-01
相关资源
最近更新 更多