我正在尝试用Java编写一个程序,当给定一个MxN矩阵时,它会找到具有最大数字总和的(连续的)子矩阵。然后程序需要返回子矩阵的左上角坐标和右下角坐标。矩阵可以包括负数,矩阵和子矩阵都不需要是正方形。
我看到这里讨论了这个:Getting the submatrix with maximum sum?,解决方案似乎是O(n ^ 3)。我的一个朋友说他们曾经设法在O(n ^ 2)中解决了这个问题。还建议here.这可能吗?
有没有可用的代码以最有效的方式解决这个问题?
答案 0 :(得分:7)
您(很可能)无法在O(n^2)
中解决您的问题,至少不知道此类算法。最优解决方案具有亚立方复杂性,但实现起来非常困难,实际上可能更慢。你可以阅读一篇关于它的论文here。
使用的常用算法是您找到的问题中引用的O(n^3)
。
答案 1 :(得分:4)
(S)他是你的朋友..所以请问他/她,并与我们分享:)