【发布时间】:2017-01-28 23:20:12
【问题描述】:
我遇到了一个简单的问题,我正在寻找比我更好的解决方案。
我有一个整数矩阵数组(tab[N][M])和整数(k),我必须找到最小的矩形(子矩阵数组)它的元素总和大于 k
所以,我目前尝试的解决方案是:
- 制作附加矩阵数组 (sum[N][M]) 和整数 solution = infinity
-
对于每个 1 i N + 1 和 1 j M + 1
sum[ i ][ j ] = sum[ i - 1 ][ j ] + sum [ i ][ j - 1] + tab[ i ] [ j ] - sum[ i - 1] [ j - 1] -
然后查看从 (x, y) 开始到 (a, b) 结束的每个矩形 f.e 矩形
Rectangle_(x,y)_(a,b) = sum[ a ][ b ] - sum[ a - x ] [ b ] - sum[ a ][ b - y ] + sum[ a - x ][ b - y ]如果 Rectangle_(x,y)_(a,b) >= k 那么 solution = current_solution 和 (a - x) * (b - y) 的最小值
但是这个解决方案很慢(四次时间),有没有可能让它更快?我正在寻找迭代的对数时间(或更差/更好)。我设法减少了我的时间,但没有大幅减少。
【问题讨论】:
-
矩阵可以包含负值吗? (我知道你说的是整数但只是检查)
-
哦...对了,我忘了说,只有 intigers >= 0
标签: arrays algorithm matrix time-complexity