Redian新闻
>
Stanford 的 Monte Winslow
avatar
Stanford 的 Monte Winslow# Biology - 生物学
h*e
1
一般面试不会见到这种东西的。权当娱乐吧。
P1:两个sorted数组,每个数组选一个数,相加。求第k大的和。
P2:一个n*n的矩阵,行和列都是sorted的,求第k大数。假设是从左到右递增,从上到
下递增。
P1是P2的特例。
这个题目O(n^2)是最直接的解法。然后有个O(k logn)的用堆来做,稍微tricky一些。
下面说下n logn的怎么搞出来。
首先想到的是套median的算法。比如一开始拿矩阵中心的那个数,say q 出来。从右上
开始往左下 能用O(n)的时间找出一条分界线, 这条分界线是单调的。使得这条线以上
的数比q小,下的数比q大。然后扔掉不对的那一半递归。第一次这么扔能扔掉至少1/4
的矩阵。问题来了,第二次继续在剩下的里面怎么做。
剩下的是神马。。是n 个row。每个row大小都不一样。目标是在这堆row里面扔掉至少1
/4. 这时候,每个row 可以找出一个median来。然后一般的做法找medians的median。
但是在这里行不通,因为有的row size比较小,这么做不能保证每次扔掉1/4. 必须修
正算法。要找weighted median。这个weight就是row size。这个weighted median 在
线性时间很容易搞,标准算法。可以用反证法很容易证明如果用weighted median 那么
在所有的row 中间至少有1/4的数比他大,1/4的数比他小。 这样就能保证每次扔掉1/4
. 扔的时候,也只要线性时间完成,因为又是一遍从右上到左下的查找。
最后的时间是:T(N) = O(\sqrt(N)) + T(3N/4) =O( nlog n). N=n^2.
这题还有个O(n)时间的解法。。没事就别去想了。。。这个nlogn的算法,如果熟悉
median的话,还是有机会搞出来。
avatar
t*i
2
不知道有没有了解这个PI的?
谢谢!
avatar
n*s
3
which company is this?
avatar
t*i
4
请问有了解的吗?
avatar
h*e
5
google onsite
avatar
Y*R
6
不知道你要了解啥
估计外人也就知道他是Jacks实验室出来的博后,看他实验室的论文做的还不错~
avatar
i*e
7
这题我记得有论文说 O(n) 可以解,但是算法非常复杂。
用堆 O(k log n) 就应该可以了。
请问 O(n log n) 有比 O(k log n) 快一些吗?
avatar
t*i
8
主要是人品如何,对手下是否支持,有没有奇葩事迹之类的。
谢谢!
avatar
f*n
9
你弄错了什么东西。如果T(N) = O(\sqrt(N)) + T(3N/4) ,那T(N) = O(\sqrt(N))。
证明:O(\sqrt(N)) + T(3N/4) = O(\sqrt(N)) + O(\sqrt(3N/4)) = O(\sqrt(N)) +
\sqrt(3/4)O(\sqrt(N)) = O(\sqrt(N)) = T(N)
avatar
h*e
10
k 可以是n^2... nlogn 这里的n就是矩阵的边长。 klogn有可能比直接做还慢。。

【在 i**********e 的大作中提到】
: 这题我记得有论文说 O(n) 可以解,但是算法非常复杂。
: 用堆 O(k log n) 就应该可以了。
: 请问 O(n log n) 有比 O(k log n) 快一些吗?

avatar
h*e
11
你再算一遍。。。



【在 f*******n 的大作中提到】
: 你弄错了什么东西。如果T(N) = O(\sqrt(N)) + T(3N/4) ,那T(N) = O(\sqrt(N))。
: 证明:O(\sqrt(N)) + T(3N/4) = O(\sqrt(N)) + O(\sqrt(3N/4)) = O(\sqrt(N)) +
: \sqrt(3/4)O(\sqrt(N)) = O(\sqrt(N)) = T(N)

avatar
b*v
12
T(N) = O(\sqrt(N)) + T(3N/4) =O( nlog n). N=n^2
那么T(N)=O(N^(log_4 3()=O(n^(log_2 3)) 比nlog(n)大。

★ 发自iPhone App: ChineseWeb - 中文网站浏览器

【在 h********e 的大作中提到】
: 一般面试不会见到这种东西的。权当娱乐吧。
: P1:两个sorted数组,每个数组选一个数,相加。求第k大的和。
: P2:一个n*n的矩阵,行和列都是sorted的,求第k大数。假设是从左到右递增,从上到
: 下递增。
: P1是P2的特例。
: 这个题目O(n^2)是最直接的解法。然后有个O(k logn)的用堆来做,稍微tricky一些。
: 下面说下n logn的怎么搞出来。
: 首先想到的是套median的算法。比如一开始拿矩阵中心的那个数,say q 出来。从右上
: 开始往左下 能用O(n)的时间找出一条分界线, 这条分界线是单调的。使得这条线以上
: 的数比q小,下的数比q大。然后扔掉不对的那一半递归。第一次这么扔能扔掉至少1/4

avatar
h*e
13
我还是写出来吧。。。T(N) = sqrt(N) + T(3N/4) = sqrt(N) + sqrt(3N/4) + T(9N/
16) = ... = sqrt(N)+sqrt(3N/4)+sqrt(9N/16)+sqrt(3^3 N/4^3) ... = 一共重复log
_{4/3} N次。。所以最后是O(nlog n)...
avatar
i*s
14
基本上都是median of median的变种
理论上是O(N)

4

【在 h********e 的大作中提到】
: 一般面试不会见到这种东西的。权当娱乐吧。
: P1:两个sorted数组,每个数组选一个数,相加。求第k大的和。
: P2:一个n*n的矩阵,行和列都是sorted的,求第k大数。假设是从左到右递增,从上到
: 下递增。
: P1是P2的特例。
: 这个题目O(n^2)是最直接的解法。然后有个O(k logn)的用堆来做,稍微tricky一些。
: 下面说下n logn的怎么搞出来。
: 首先想到的是套median的算法。比如一开始拿矩阵中心的那个数,say q 出来。从右上
: 开始往左下 能用O(n)的时间找出一条分界线, 这条分界线是单调的。使得这条线以上
: 的数比q小,下的数比q大。然后扔掉不对的那一半递归。第一次这么扔能扔掉至少1/4

avatar
f*n
15
sqrt(N)+sqrt(3N/4)+sqrt(9N/16)+sqrt(3^3 N/4^3) = sqrt(N) * (1+sqrt(3/4)+sqrt
(3/4)^2+sqrt(3/4)^3+...)
1+sqrt(3/4)+sqrt(3/4)^2+sqrt(3/4)^3+...是geometric series。一直加起来=1/(1-
sqrt(3/4)),是一个constant。所以是sqrt(N) * O(1) = O(sqrt(N))

log

【在 h********e 的大作中提到】
: 我还是写出来吧。。。T(N) = sqrt(N) + T(3N/4) = sqrt(N) + sqrt(3N/4) + T(9N/
: 16) = ... = sqrt(N)+sqrt(3N/4)+sqrt(9N/16)+sqrt(3^3 N/4^3) ... = 一共重复log
: _{4/3} N次。。所以最后是O(nlog n)...

avatar
h*e
16
唔那我递归方程写错了,本意是。。应该是T(N) = O(n) + T(3N/4) 不好意思。。
avatar
f*n
17
那T(N) = O(n)

【在 h********e 的大作中提到】
: 唔那我递归方程写错了,本意是。。应该是T(N) = O(n) + T(3N/4) 不好意思。。
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。