由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 讨论CAIWU那道矩阵DP题的思路?
相关主题
minimum path sum的滚动数组啥意思那道经典的求和问题
二维数组问题问几个brain teaser
请教大家一个算法的面试题目问一道brainteaser
请教一下DP解法能用一维数组的面试的时候用二维数组会减分不?问个小题
微软面试题微软第一轮电面
请教一道题看不懂careercup上一题的答案
问一道题帮忙看个题
那道0-1矩阵找最大的全1矩形题leetcode jump game 用一维DP做
相关话题的讨论汇总
话题: 矩阵话题: dp话题: 二维话题: 数组话题: cc
进入JobHunting版参与讨论
1 (共1页)
O******i
发帖数: 269
1
和一个美国人吧。给一个矩阵和一个数k,要算另外一个矩阵。新的矩阵的每个位置是
老矩阵里面每个对应位置位中心边长为k的小矩阵的平均。用DP算法可以做到N^2。然后
实现这个算法。写了三个函数。
在火车上睡觉的时候想了个解法,不知道对不对。
这个题的背景实际上是二维数字图像处理的卷积滤波。这里是求平均,也可以求最大,
最小以及median, 其实也就是二维的离散拉普拉斯算符。
其实可以先考虑一维的情形。难点是如何用空间换时间,不需要每次都对k个数都重新
求和。对一维数组A, 如果构造辅助数组B, 使得
B[j] = A[0] + A[1] + ... A[j]
则A[m] + A[m + 1] + ... + A[m + k - 1] = B[m + k - 1] - B[m - 1],可以O(1)时
间求得,而不用O(k)。
构造B的过程是DP, 类似Fibonacci的DP构造。
扩展到二维也是一样的,二维数组B每个元素的值,是二维数组A的左上顶点元素到右下
和B那个元素位置对应元素的子矩阵的和。
构造B的过程也是DP, 只是递归方程比一维情形稍微复杂些,是两个矩阵相加,减去相
交部分矩阵,再加上右下顶点。利用B求A中任意子矩阵的和完全类似。画个图,利用简
单集合论知识就清楚了。
另外我觉得这题,就是CC 150上二维数组求最大子矩阵和的变体,都利用了辅助数组B。
所以说熟看CC 150还是很有必要的,不知道CAIWU有没有受CC 150那道题的影响?
C***U
发帖数: 2406
2
做的时候不知道cc150那个题目

【在 O******i 的大作中提到】
: 和一个美国人吧。给一个矩阵和一个数k,要算另外一个矩阵。新的矩阵的每个位置是
: 老矩阵里面每个对应位置位中心边长为k的小矩阵的平均。用DP算法可以做到N^2。然后
: 实现这个算法。写了三个函数。
: 在火车上睡觉的时候想了个解法,不知道对不对。
: 这个题的背景实际上是二维数字图像处理的卷积滤波。这里是求平均,也可以求最大,
: 最小以及median, 其实也就是二维的离散拉普拉斯算符。
: 其实可以先考虑一维的情形。难点是如何用空间换时间,不需要每次都对k个数都重新
: 求和。对一维数组A, 如果构造辅助数组B, 使得
: B[j] = A[0] + A[1] + ... A[j]
: 则A[m] + A[m + 1] + ... + A[m + k - 1] = B[m + k - 1] - B[m - 1],可以O(1)时

O******i
发帖数: 269
3
那思路对么?不过具体写代码也不容易写对,边界和下标处理挺麻烦的。

【在 C***U 的大作中提到】
: 做的时候不知道cc150那个题目
O******i
发帖数: 269
4
如果边长为k的矩阵有部分在界外是怎么处理的?是对界外的元素补0? 还是只考虑在界
内的情形(有部分在界外就不去求平均数,中心保留原值)?

【在 C***U 的大作中提到】
: 做的时候不知道cc150那个题目
j*****y
发帖数: 1071
5
nice. Thanks.

【在 O******i 的大作中提到】
: 和一个美国人吧。给一个矩阵和一个数k,要算另外一个矩阵。新的矩阵的每个位置是
: 老矩阵里面每个对应位置位中心边长为k的小矩阵的平均。用DP算法可以做到N^2。然后
: 实现这个算法。写了三个函数。
: 在火车上睡觉的时候想了个解法,不知道对不对。
: 这个题的背景实际上是二维数字图像处理的卷积滤波。这里是求平均,也可以求最大,
: 最小以及median, 其实也就是二维的离散拉普拉斯算符。
: 其实可以先考虑一维的情形。难点是如何用空间换时间,不需要每次都对k个数都重新
: 求和。对一维数组A, 如果构造辅助数组B, 使得
: B[j] = A[0] + A[1] + ... A[j]
: 则A[m] + A[m + 1] + ... + A[m + k - 1] = B[m + k - 1] - B[m - 1],可以O(1)时

C***U
发帖数: 2406
6
思路应该对的吧
就是矩阵(i,j)可以通过(i-1,j),(i,j-1),(i-1,j-1)通过常数时间得到
看来我做的题还是太少了。。。主要只做了leetcode
cc 150上的题目 我竟然不知道。。。。

【在 O******i 的大作中提到】
: 那思路对么?不过具体写代码也不容易写对,边界和下标处理挺麻烦的。
l*******b
发帖数: 2586
7
哈哈,这个题我也这样想的。不过,超过边界了怎么处理,例如p=10,(0,0)取谁的平
均呀?(5,5)又怎么取. 感觉有点麻烦

【在 C***U 的大作中提到】
: 思路应该对的吧
: 就是矩阵(i,j)可以通过(i-1,j),(i,j-1),(i-1,j-1)通过常数时间得到
: 看来我做的题还是太少了。。。主要只做了leetcode
: cc 150上的题目 我竟然不知道。。。。

C***U
发帖数: 2406
8
不在原来矩阵里面的那部分 都用0代替

【在 l*******b 的大作中提到】
: 哈哈,这个题我也这样想的。不过,超过边界了怎么处理,例如p=10,(0,0)取谁的平
: 均呀?(5,5)又怎么取. 感觉有点麻烦

O******i
发帖数: 269
9
CC 150 5th edition 18.12, 解法二,属于hard部分章节,解答还很详细。
我也是后来才发现和这题有点关联。

【在 C***U 的大作中提到】
: 思路应该对的吧
: 就是矩阵(i,j)可以通过(i-1,j),(i,j-1),(i-1,j-1)通过常数时间得到
: 看来我做的题还是太少了。。。主要只做了leetcode
: cc 150上的题目 我竟然不知道。。。。

C***U
发帖数: 2406
10
没有第五版 。。。。

【在 O******i 的大作中提到】
: CC 150 5th edition 18.12, 解法二,属于hard部分章节,解答还很详细。
: 我也是后来才发现和这题有点关联。

相关主题
请教一道题那道经典的求和问题
问一道题问几个brain teaser
那道0-1矩阵找最大的全1矩形题问一道brainteaser
进入JobHunting版参与讨论
O******i
发帖数: 269
11
大牛你不用第五版,都直接白板前现想出来了。面试官想,这么smart的人,不hire真
是没天理呀。话说面试官其实不喜欢我们有撞题痕迹的说。

【在 C***U 的大作中提到】
: 没有第五版 。。。。
w****a
发帖数: 186
12
这是二维矩阵卷积的特例,这种情况下,可以先算小矩阵的和,再除以k*k。计算小矩
阵的和,可以用summed area table(也叫integral image),跟楼主说到的辅助数组是
一样的:
http://en.wikipedia.org/wiki/Summed_area_table
算法是O(N)的,其实非常简单,就是利用A(i-1, j-1), A(i-1, j), A(i, j-1)来算A(i
, j)。应该用不到DP。
楼主很强!

【在 O******i 的大作中提到】
: 和一个美国人吧。给一个矩阵和一个数k,要算另外一个矩阵。新的矩阵的每个位置是
: 老矩阵里面每个对应位置位中心边长为k的小矩阵的平均。用DP算法可以做到N^2。然后
: 实现这个算法。写了三个函数。
: 在火车上睡觉的时候想了个解法,不知道对不对。
: 这个题的背景实际上是二维数字图像处理的卷积滤波。这里是求平均,也可以求最大,
: 最小以及median, 其实也就是二维的离散拉普拉斯算符。
: 其实可以先考虑一维的情形。难点是如何用空间换时间,不需要每次都对k个数都重新
: 求和。对一维数组A, 如果构造辅助数组B, 使得
: B[j] = A[0] + A[1] + ... A[j]
: 则A[m] + A[m + 1] + ... + A[m + k - 1] = B[m + k - 1] - B[m - 1],可以O(1)时

o*********r
发帖数: 446
13
请教一下,这个问题本身是不是也是CG里面一种Blur的实现?
w****a
发帖数: 186
14
Yes, it is one of the simple blurring technique, called box filters. It is
simpler and faster than the Gaussian blur and other blurring technique.

【在 o*********r 的大作中提到】
: 请教一下,这个问题本身是不是也是CG里面一种Blur的实现?
f******n
发帖数: 198
15
这个以前学Image Processing的时候都是用Fast Fourier Transform做的。当然除非刚
上完课,否则面试的时候用FFT基本是找死。。。
l*******b
发帖数: 2586
16
? FFT也不可能比O(n^2)快呀???为什么

【在 f******n 的大作中提到】
: 这个以前学Image Processing的时候都是用Fast Fourier Transform做的。当然除非刚
: 上完课,否则面试的时候用FFT基本是找死。。。

f******n
发帖数: 198
17
FFT是比n^2慢,我是对上面那个说CG处理的说的。Box filter的特殊性质决定了你可以
用较小的运算量从相邻的点算出当前的点的数值,所以可以做到n^2。如果是一个不规
则的filter,就要FFT了。
l*******b
发帖数: 2586
18
嗯能不能举个不规则的例子,看看有有什么实际用途,学习下

【在 f******n 的大作中提到】
: FFT是比n^2慢,我是对上面那个说CG处理的说的。Box filter的特殊性质决定了你可以
: 用较小的运算量从相邻的点算出当前的点的数值,所以可以做到n^2。如果是一个不规
: 则的filter,就要FFT了。

a********m
发帖数: 15480
19
比如低通滤波一类的(包括前面提到的高斯铝箔)也是一个k*k矩阵,但是每个元素不
一样(数组对称),不象box这种每个元素都是1/(k*k),所以以前的结果不能用来计算
当前结果,变换以后简单乘法
就可以了。

【在 l*******b 的大作中提到】
: 嗯能不能举个不规则的例子,看看有有什么实际用途,学习下
C***U
发帖数: 2406
20
这帖子还能上首页 服了。。。。

【在 a********m 的大作中提到】
: 比如低通滤波一类的(包括前面提到的高斯铝箔)也是一个k*k矩阵,但是每个元素不
: 一样(数组对称),不象box这种每个元素都是1/(k*k),所以以前的结果不能用来计算
: 当前结果,变换以后简单乘法
: 就可以了。

a********m
发帖数: 15480
21
恩。。。。不知道钻风把dp理解成啥了。。。。毒品?

【在 C***U 的大作中提到】
: 这帖子还能上首页 服了。。。。
1 (共1页)
进入JobHunting版参与讨论
相关主题
leetcode jump game 用一维DP做微软面试题
DP题现在google和facebook考的多吗?请教一道题
[合集] Google Phone Interview (2nd)问一道题
请问一下啥是static/dynamic heap?那道0-1矩阵找最大的全1矩形题
minimum path sum的滚动数组啥意思那道经典的求和问题
二维数组问题问几个brain teaser
请教大家一个算法的面试题目问一道brainteaser
请教一下DP解法能用一维数组的面试的时候用二维数组会减分不?问个小题
相关话题的讨论汇总
话题: 矩阵话题: dp话题: 二维话题: 数组话题: cc