二维最大子阵列

DaG*_*DaG 16 arrays algorithm optimization max

Bentley's Programming Pearls(第2版),在关于最大子阵列问题的章节中,描述了它的二维版本:

...我们得到一个n × n的实数数组,我们必须找到任何矩形子数组中包含的最大总和.这个问题的复杂性是什么?

宾利提到,截至本书的出版日期(2000年),寻找最佳解决方案的问题是公开的.
还是这样吗?哪个是最知名的解决方案?任何指向近期文学的指针?

rea*_*gan 3

这个问题(最大子数组)的一维解决方案是 Theta(n),使用一种名为“Kadane 算法”的算法(我确信还有其他算法,但我对此有个人经验)。使用 Kadane 算法的实现,该问题的 2D 解决方案(最大子矩形)已知为 O(n^3)(我再次确定还有其他算法,但我以前使用过这个算法)。

虽然我们知道 Theta(n^3) 可以找到二维解,但没有人能够证明 n^3 是否是下界。对于许多算法来说,当增加维度时,算法的下限就会增加一个常数值。对于这个特定的问题,复杂性不会线性增加,因此没有已知的解决方案适用于任何给定的维度,因此问题仍然悬而未决。

参考类似的情况:我们知道2个矩阵可以在n^3次内相乘。我相信还有一种算法可以在 n^2.8 中做到这一点。然而,没有数学表明我们不能让它低于 n^2.8,所以它仍然是一个“开放”算法。