由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 问个很有难度的矩阵算法问题
相关主题
一道算法题,N*N array里最大的subarraygoogle 面试
求解算法题careerup 150的一道经典题
来一题select k to maximize the minimum
问三道题leetcode的strstr要怎么才能过large?
问个老题 - max submatrix with the same border想请教一下动态规划和贪心算法的区别
google 面试题新鲜出炉的 Google Onsite 面经并求祝福
Amazon面试题的疑惑,5个包子答谢!讨论A家一道题
最长递增子array的算法Share一下google intern电面问题
相关话题的讨论汇总
话题: sum话题: col话题: row话题: max话题: int
进入JobHunting版参与讨论
1 (共1页)
p********7
发帖数: 549
1
求2维矩阵里面最大和的子矩阵的和。
-1 -2 3
3 2 -2
1 1 -1
最大和的是 7
没想到除了brute force还有什么办法
f***g
发帖数: 214
2
是不是Programming Pearl上的那道题?
O(n^2)?
h**6
发帖数: 4160
3
我想到的方法是任选两行作为上下边,有O(n^2)种方法,对于每一种情况,进行一维最
大子数组处理,复杂度为O(n)。总复杂度为O(n^3)。
http://www.mitbbs.com/article_t/JobHunting/31671177.html
这贴中有人提到programming pearls 8.7.13,有书的朋友能不能简单介绍一下那是用
的什么方法?
s***r
发帖数: 1
4
最好应该只能O(n^3)吧

【在 p********7 的大作中提到】
: 求2维矩阵里面最大和的子矩阵的和。
: -1 -2 3
: 3 2 -2
: 1 1 -1
: 最大和的是 7
: 没想到除了brute force还有什么办法

f***g
发帖数: 214
5
嗯,O(n3),刚才说错了。
8.7.13的解答请看附件。
解法2就是预处理一下
每一行都等于当前列之前所有行的和。
每次就不用都加一遍了。
求第2行到第6行的和,就用第6行减去第2行

【在 h**6 的大作中提到】
: 我想到的方法是任选两行作为上下边,有O(n^2)种方法,对于每一种情况,进行一维最
: 大子数组处理,复杂度为O(n)。总复杂度为O(n^3)。
: http://www.mitbbs.com/article_t/JobHunting/31671177.html
: 这贴中有人提到programming pearls 8.7.13,有书的朋友能不能简单介绍一下那是用
: 的什么方法?

p********7
发帖数: 549
6
我觉得每行的最大max和矩阵的最大max没有关系的,有可能最大max的每一行都不是这
一行的
最大max array

【在 h**6 的大作中提到】
: 我想到的方法是任选两行作为上下边,有O(n^2)种方法,对于每一种情况,进行一维最
: 大子数组处理,复杂度为O(n)。总复杂度为O(n^3)。
: http://www.mitbbs.com/article_t/JobHunting/31671177.html
: 这贴中有人提到programming pearls 8.7.13,有书的朋友能不能简单介绍一下那是用
: 的什么方法?

p********7
发帖数: 549
7
you are right。

【在 f***g 的大作中提到】
: 嗯,O(n3),刚才说错了。
: 8.7.13的解答请看附件。
: 解法2就是预处理一下
: 每一行都等于当前列之前所有行的和。
: 每次就不用都加一遍了。
: 求第2行到第6行的和,就用第6行减去第2行

i**********e
发帖数: 1145
8
This is Maximum Sum of 2D array, an extension to maximum sum of 1D array.
See Kadane's algorithm:
http://en.wikipedia.org/wiki/Maximum_subarray_problem
The same problem is also in Online Judge. You can test your code there:
http://uva.onlinejudge.org/external/1/108.html
一些常见面试题的答案与总结 -
http://www.ihas1337code.com
t*****j
发帖数: 1105
9
careerup上有道题类似的。

【在 p********7 的大作中提到】
: you are right。
K******g
发帖数: 1870
10
我的代码,复杂度O(m^2*n),根据programming pearls上的hints
int getMaxSubMatrix(int a[][], int m, int n)
{
int sum = 0;
int max = MIN_INTEGER;
int row_sum;
for(col_i=0; col_i {
for(col_j=0; col_j<=col_i; col_j++)
{
for(row=0; row {
row_sum = get_sum(row, col_i, col_j);
if(sum < 0) sum = row_sum;
else sum+= row_sum;
max = max }
}
}
return max;
}

【在 p********7 的大作中提到】
: 求2维矩阵里面最大和的子矩阵的和。
: -1 -2 3
: 3 2 -2
: 1 1 -1
: 最大和的是 7
: 没想到除了brute force还有什么办法

A*********r
发帖数: 564
11
看了一下pearls, 觉得之前讨论的那个DP公式还是对的,跟pearls的预处理有同样的
效果。。
Define m(k,i,j) to be the maximum sum submatrix ending with the line A[k,i..
j]. (k is the row number, i, j is the left and right column number)
then the DP formula is m(k,i,j)=max{ 0, m(k-1,i,j)+sum{A[k,i..j]}}
注意到 m(k,1,j)其实就是第k行中从左到第j列的所有和,跟预处理的效果一样。。
你的这个例子,得到的 m(1, i,j) m(2, i,j), m(3, i, j)分别为:
(只考虑i<=j的情况)
0 0 0
0 1
3
3 5 3
2 1
1
4 7 4
4 1
0
最大和是7, m(3,1,2)也就是以第3行,第一列到第二列为最下面一条边的矩形。通过
backtrack应该可以找到前面的。。

【在 p********7 的大作中提到】
: 求2维矩阵里面最大和的子矩阵的和。
: -1 -2 3
: 3 2 -2
: 1 1 -1
: 最大和的是 7
: 没想到除了brute force还有什么办法

A*********r
发帖数: 564
12
再看了一下最里面的loop, 觉得dp的方法没有办法用在全是负数的矩阵里,这跟max subarray 在一维 O(n)那个办法有一样的局限性。。
1 (共1页)
进入JobHunting版参与讨论
相关主题
Share一下google intern电面问题问个老题 - max submatrix with the same border
问问题,0/1 矩阵内最大1矩阵的问题google 面试题
一道矩阵路径题Amazon面试题的疑惑,5个包子答谢!
请教一个找DP路径问题最长递增子array的算法
一道算法题,N*N array里最大的subarraygoogle 面试
求解算法题careerup 150的一道经典题
来一题select k to maximize the minimum
问三道题leetcode的strstr要怎么才能过large?
相关话题的讨论汇总
话题: sum话题: col话题: row话题: max话题: int