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 - Fatal编程技术网

Algorithm 最大和/面积子矩阵

Algorithm 最大和/面积子矩阵,algorithm,matrix,Algorithm,Matrix,输入:正数/负数和k的nxn矩阵 输出:子矩阵,其元素的最大和除以至少有k个元素的元素数 对于这个问题,有比O(n^4)更好的算法吗?有一种O(n^3)二维kadane算法,用于在nxn矩阵中找到最大和子矩阵(即子矩形)。(你可以在SO上找到关于它的帖子,或者在线阅读)。一旦您了解了算法的工作原理,很明显,如果您能够解决在O(n)时间内的n个数字的一维数组中找到长度至少为m的最大平均子区间的问题,那么您就可以得到问题的O(n^3)时间解。这确实是可能的,请参阅文件cs.slu.edu/~gold

输入:正数/负数和k的nxn矩阵

输出:子矩阵,其元素的最大和除以至少有k个元素的元素数

对于这个问题,有比O(n^4)更好的算法吗?

有一种O(n^3)二维kadane算法,用于在nxn矩阵中找到最大和子矩阵(即子矩形)。(你可以在SO上找到关于它的帖子,或者在线阅读)。一旦您了解了算法的工作原理,很明显,如果您能够解决在O(n)时间内的n个数字的一维数组中找到长度至少为m的最大平均子区间的问题,那么您就可以得到问题的O(n^3)时间解。这确实是可能的,请参阅文件cs.slu.edu/~goldwasser/publications/DensityPreprint.pdf

因此,对于您的问题,有一个O(n^3)时间解决方案

有一种O(n^3)2-d kadane算法,用于在nxn矩阵中寻找最大和子矩阵(即子矩形)。(你可以在SO上找到关于它的帖子,或者在线阅读)。一旦您了解了算法的工作原理,很明显,如果您能够解决在O(n)时间内的n个数字的一维数组中找到长度至少为m的最大平均子区间的问题,那么您就可以得到问题的O(n^3)时间解。这确实是可能的,请参阅文件cs.slu.edu/~goldwasser/publications/DensityPreprint.pdf


因此,对于您的问题,有一个O(n^3)时间解决方案

解决此问题的基于FFT的分治方法:


它的效率不如Kadane的(O(N^3)vs.O(N^3 log N)),但在解决方案构造方面却有不同的见解。

基于FFT的分治方法解决此问题:


它的效率不如Kadane的(O(N^3)vs.O(N^3 log N)),但在解决方案构造方面却有不同的见解。

readthis@Mateusz这是关于最大和的问题。这个问题有一个简单的答案:只要找到矩阵的最大元素。包含此元素的1x1子矩阵是最大和/面积子矩阵。@EvgenyKluev您说得对。如果我们查找包含k个以上元素的矩阵会怎么样。对于包含k个以上元素的矩阵,您可以尝试所有列的子集,并解决此问题的一维版本,如中所述。阅读this@Mateusz这是关于最大和的问题。这个问题有一个简单的答案:只要找到矩阵的最大元素。包含此元素的1x1子矩阵是最大和/面积子矩阵。@EvgenyKluev您说得对。如果我们寻找k个元素以上的矩阵会怎么样。对于k个元素以上的矩阵,您可以尝试所有列的子集,并解决该问题的一维版本,如中所述。这非常令人印象深刻。这非常令人印象深刻。