由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 一道 Amazon DP题
相关主题
问个 matrix 的问题 (CS)请教一个binary tree问题
Another problem about Binary tree.google 电面
请问关于lowest common ancestor的问题。问个题
再来一道简单的bit运算题面试题:transpose a matrix in place
Careercup question.请教一个常见的面试题的答案
请教一道rocket fuel DP题一道面试题(integer to binary string)
微软面世经过Google电面题
昨天面试的题目Amazon面试题的疑惑,5个包子答谢!
相关话题的讨论汇总
话题: sum0话题: matrix话题: int话题: sub话题: dp
进入JobHunting版参与讨论
1 (共1页)
D****6
发帖数: 278
1
Given a matrix of integers. How to calculate the sum of a sub-matrix.
A sub-matrix is represented by x, y, h, w, where x and y is the position of
the upper-left corner, h is the height, w is the width.
int[][] matrix
int sum(int x, int y, int h, int w){...}
这个谁都会.
之后问如果这个函数会被调用多次,而且用在同一个matrix上, sub-matrix会与之前的
overlap, 怎么优化.
我就说用DP之类的, 把之前结果存下来, 有overlap那部分就直接用.
可具体我也不知道怎么做.
请高手指点下
多谢!
h**6
发帖数: 4160
2
二维二叉索引树 (2D Binary Indexed Tree),对n*m的矩阵,预处理的时间复杂度为O(nmlognlogm),此后每次求和效率可以达到O(lognlogm),与子矩阵大小无关。
r****o
发帖数: 1950
3
我的想法先计算sum0函数,sum0(int h, int w)表示从(0,0)左上角开始,height为h,
width为w的sub-matrix的sum。遍历matrix,将sum0的结果存到一个二维数组sum0[][]
里面。
计算sum0可以用如下方法:
sum0[x][y]=sum0[x-1][y]+sum0[x][y-1]-sum0[x-1][y-1]+A[x][y].
计算sum()用sum0矩阵的值就可以了。
sum(x,y,h,w)=sum0[x+w][h+y]-sum0[x+w][y]-sum0[x][y+h]+sum0[x][y]
不知道有没有更好的方法。

of

【在 D****6 的大作中提到】
: Given a matrix of integers. How to calculate the sum of a sub-matrix.
: A sub-matrix is represented by x, y, h, w, where x and y is the position of
: the upper-left corner, h is the height, w is the width.
: int[][] matrix
: int sum(int x, int y, int h, int w){...}
: 这个谁都会.
: 之后问如果这个函数会被调用多次,而且用在同一个matrix上, sub-matrix会与之前的
: overlap, 怎么优化.
: 我就说用DP之类的, 把之前结果存下来, 有overlap那部分就直接用.
: 可具体我也不知道怎么做.

h**6
发帖数: 4160
4
楼上这个方法更好,单次求和复杂度是O(1)
用2D Binary Indexed Tree的优点是修改数据方便,如果矩阵数据始终固定不变,还是楼上
的方法更胜一筹。
r****o
发帖数: 1950
5
还是你强,我只会些土方法。呵呵。

是楼上

【在 h**6 的大作中提到】
: 楼上这个方法更好,单次求和复杂度是O(1)
: 用2D Binary Indexed Tree的优点是修改数据方便,如果矩阵数据始终固定不变,还是楼上
: 的方法更胜一筹。

h*h
发帖数: 23
6
这个算sum0的算法在sub-matrix 不是正方型的时候就不成立了吧.

【在 r****o 的大作中提到】
: 我的想法先计算sum0函数,sum0(int h, int w)表示从(0,0)左上角开始,height为h,
: width为w的sub-matrix的sum。遍历matrix,将sum0的结果存到一个二维数组sum0[][]
: 里面。
: 计算sum0可以用如下方法:
: sum0[x][y]=sum0[x-1][y]+sum0[x][y-1]-sum0[x-1][y-1]+A[x][y].
: 计算sum()用sum0矩阵的值就可以了。
: sum(x,y,h,w)=sum0[x+w][h+y]-sum0[x+w][y]-sum0[x][y+h]+sum0[x][y]
: 不知道有没有更好的方法。
:
: of

D****6
发帖数: 278
7
也成立吧

【在 h*h 的大作中提到】
: 这个算sum0的算法在sub-matrix 不是正方型的时候就不成立了吧.
w****m
发帖数: 146
8
second this

【在 r****o 的大作中提到】
: 我的想法先计算sum0函数,sum0(int h, int w)表示从(0,0)左上角开始,height为h,
: width为w的sub-matrix的sum。遍历matrix,将sum0的结果存到一个二维数组sum0[][]
: 里面。
: 计算sum0可以用如下方法:
: sum0[x][y]=sum0[x-1][y]+sum0[x][y-1]-sum0[x-1][y-1]+A[x][y].
: 计算sum()用sum0矩阵的值就可以了。
: sum(x,y,h,w)=sum0[x+w][h+y]-sum0[x+w][y]-sum0[x][y+h]+sum0[x][y]
: 不知道有没有更好的方法。
:
: of

c******n
发帖数: 4965
9
查RMQ 找到这个,很有意思
http://www.topcoder.com/tc?module=Static&d1=tutorials&d2=lowest

of

【在 D****6 的大作中提到】
: Given a matrix of integers. How to calculate the sum of a sub-matrix.
: A sub-matrix is represented by x, y, h, w, where x and y is the position of
: the upper-left corner, h is the height, w is the width.
: int[][] matrix
: int sum(int x, int y, int h, int w){...}
: 这个谁都会.
: 之后问如果这个函数会被调用多次,而且用在同一个matrix上, sub-matrix会与之前的
: overlap, 怎么优化.
: 我就说用DP之类的, 把之前结果存下来, 有overlap那部分就直接用.
: 可具体我也不知道怎么做.

1 (共1页)
进入JobHunting版参与讨论
相关主题
Amazon面试题的疑惑,5个包子答谢!Careercup question.
求教一个算法面试问题,被难住了请教一道rocket fuel DP题
也来一道矩阵题 微软面世经过
Google的电面昨天面试的题目
问个 matrix 的问题 (CS)请教一个binary tree问题
Another problem about Binary tree.google 电面
请问关于lowest common ancestor的问题。问个题
再来一道简单的bit运算题面试题:transpose a matrix in place
相关话题的讨论汇总
话题: sum0话题: matrix话题: int话题: sub话题: dp