由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 这题怎么做啊?
相关主题
问一道google的题Leetcode problems' difficulty
N台server,求median请教一个题,不太容易,要O(n)
发篇面经终于弄明白median of two sorted arrays了,发帖庆祝一下
这题有解吗?发包子请教大牛:scramble string这题递归的复杂度
Google面试怎么这么难啊,LG很难过,我该怎么劝他呢? (转载)FB onsite面经
这题啥意思?贡献前天VMware电面面经,应该是挂了
median of an array of ints, 请问这题的经典回答是什么?谢谢find medium number in stream 这题怎么作
[题已更新/求到F继续M]G onsite悲剧了,求M,F的refer行么Median of Two Sorted Arrays这题真他妈的难
相关话题的讨论汇总
话题: machine话题: range话题: 个数话题: 机器话题: median
进入JobHunting版参与讨论
1 (共1页)
w****o
发帖数: 2210
1
一共有N个机器,每个机器上有N个数。每个机器最多存O(N)个数并对它们操作。如何找
到N^2个数的中数(median)?
我只能想到一种方法:如果知道数的总range,就把数划分成N个range,每个机器都算
自己range里面的数的个数,这样就知道median在哪个range的第K大。然后再把那个
range的拿出来同样分布到N个机器上处理,这样递归下去直到数目很小可以直接一台机
器sort找到。
但是这样只能对均匀分布才行,如果某个range的数特别多,一台机器都放不下就不行
了。
h*********3
发帖数: 111
2

一个笨办法是:
每台机器放n个数,然后排序。
然后挨个数,直到找到median.


【在 w****o 的大作中提到】
: 一共有N个机器,每个机器上有N个数。每个机器最多存O(N)个数并对它们操作。如何找
: 到N^2个数的中数(median)?
: 我只能想到一种方法:如果知道数的总range,就把数划分成N个range,每个机器都算
: 自己range里面的数的个数,这样就知道median在哪个range的第K大。然后再把那个
: range的拿出来同样分布到N个机器上处理,这样递归下去直到数目很小可以直接一台机
: 器sort找到。
: 但是这样只能对均匀分布才行,如果某个range的数特别多,一台机器都放不下就不行
: 了。

l*****a
发帖数: 14598
3
你做得就是正解
为啥没有信心呢

【在 w****o 的大作中提到】
: 一共有N个机器,每个机器上有N个数。每个机器最多存O(N)个数并对它们操作。如何找
: 到N^2个数的中数(median)?
: 我只能想到一种方法:如果知道数的总range,就把数划分成N个range,每个机器都算
: 自己range里面的数的个数,这样就知道median在哪个range的第K大。然后再把那个
: range的拿出来同样分布到N个机器上处理,这样递归下去直到数目很小可以直接一台机
: 器sort找到。
: 但是这样只能对均匀分布才行,如果某个range的数特别多,一台机器都放不下就不行
: 了。

c*****n
发帖数: 96
4
My thought on this issue:
To generalize the problem, let say, for machine i, it has an array A[i], A[i
+1] ... A[j]. The initial state is i = 0; j = N-1;
Assuming there is a controller machine C.
1) Sort N numbers on each machine.
2) For each machine, randomly pick up a number A[k] (i<=k<=j) and send it to
the controller C. The Controller C calculates the median M from these N
numbers
3) Controller sends M back to each machine and let them report P[i] back
which is number of data that are less than M on the machine i.
let T = P[0]+P[1]+...+P[n],
M = lower(N*N/2) + 1
if T = M, then we find the median;
if T > M, then the problem becomes finding the median in N machines, for
ith machine, the array is A[i]...A[i+P[i]-1]
if T < M, then the problem becomes finding the (M-T)th item in N machine,
for ith machine, the array is A[i+P[i]+1]..A[j]
so the problem can be solved recursively.
The time complexity should be O(N*N), since each number should only be
visited once.
g***y
发帖数: 764
5
你说的办法对非均匀分布也可以用,就是动态地去re-range,要求scheduler比较智能
可以根据动态信息重新schedule job.

【在 w****o 的大作中提到】
: 一共有N个机器,每个机器上有N个数。每个机器最多存O(N)个数并对它们操作。如何找
: 到N^2个数的中数(median)?
: 我只能想到一种方法:如果知道数的总range,就把数划分成N个range,每个机器都算
: 自己range里面的数的个数,这样就知道median在哪个range的第K大。然后再把那个
: range的拿出来同样分布到N个机器上处理,这样递归下去直到数目很小可以直接一台机
: 器sort找到。
: 但是这样只能对均匀分布才行,如果某个range的数特别多,一台机器都放不下就不行
: 了。

h*********3
发帖数: 111
6
为啥是正解呢?把数按range分到各个机器的时候,不就已经统计出在这个range有多
少个数了吗?那么为什么还需要在每个机器上统计各个range有多少个数呢?不如就把
这些数存在本机的disk上?

【在 l*****a 的大作中提到】
: 你做得就是正解
: 为啥没有信心呢

g***y
发帖数: 764
7
不是, 加入知道这些数range是0-1000,那假设是均匀分布的,如果有10台机器,
那就按0-100,100-200,分给这些机器处理。每个机器负责数range内的个数。
如果分着分着发现有的机器明显overload,有的underloda,那scheduler可以再进行
re-range, load balancing..

【在 h*********3 的大作中提到】
: 为啥是正解呢?把数按range分到各个机器的时候,不就已经统计出在这个range有多
: 少个数了吗?那么为什么还需要在每个机器上统计各个range有多少个数呢?不如就把
: 这些数存在本机的disk上?

h*********3
发帖数: 111
8

当你分得时候,你就已经统计出来各个range里的数目了吧。
何必还需要各个机器在统计数目呢?

【在 g***y 的大作中提到】
: 不是, 加入知道这些数range是0-1000,那假设是均匀分布的,如果有10台机器,
: 那就按0-100,100-200,分给这些机器处理。每个机器负责数range内的个数。
: 如果分着分着发现有的机器明显overload,有的underloda,那scheduler可以再进行
: re-range, load balancing..

g***y
发帖数: 764
9
当然没有。加入有1000个数放在network file system上面,10台机器都去读这些数,
机器1只负责数0-100内的数,加入读到range外面的,ignore。

【在 h*********3 的大作中提到】
:
: 当你分得时候,你就已经统计出来各个range里的数目了吧。
: 何必还需要各个机器在统计数目呢?

h*********3
发帖数: 111
10
题目是n台机器,没台n个数吧。
如果是你说的这种情况(有1000个数放在network file system上面),也不需要每台
机器都读阿。如果10台都读,那就读了1000*10次,还不如就一台读,那就是1000次,
一样得到了分布情况阿。

【在 g***y 的大作中提到】
: 当然没有。加入有1000个数放在network file system上面,10台机器都去读这些数,
: 机器1只负责数0-100内的数,加入读到range外面的,ignore。

g***y
发帖数: 764
11
n台机器 每个n个数 同样可以用类似的办法,分m个range(noted as 0,1,2,..m-1),每
台机器负责数自己的n个数,输出m个,key是0,1...m-1, value包括range
内出现的个数,和一个pointer指向local n个数中range内的那部分数。
全部弄完后,n台机器在进行aggregation,产生最终,这时候value是
aggregated value, 到这时候,可以看出median具体在哪个range内。剩下的工作就是
告诉n台机器去找这个range内的第X个数了。

【在 h*********3 的大作中提到】
: 题目是n台机器,没台n个数吧。
: 如果是你说的这种情况(有1000个数放在network file system上面),也不需要每台
: 机器都读阿。如果10台都读,那就读了1000*10次,还不如就一台读,那就是1000次,
: 一样得到了分布情况阿。

R***i
发帖数: 78
12
随机一个数字, 发送到每台机器上
每台电脑返回大于次数的数字个数x, 以及小于此数的数字个数y
如果X1+X2+...+Xn == Y1+Y2+...Yn, 则找到median
不然就用二分法生产一个新的数字继续发送到每台电脑上,循环
1 (共1页)
进入JobHunting版参与讨论
相关主题
Median of Two Sorted Arrays这题真他妈的难Google面试怎么这么难啊,LG很难过,我该怎么劝他呢? (转载)
一个算法题:Selecting median of three sorted arrays这题啥意思?
找2个sorted array中的第K小的元素,有O(lgn)方法吗?median of an array of ints, 请问这题的经典回答是什么?谢谢
在看大数据量的题,问一道简单的分布式处理[题已更新/求到F继续M]G onsite悲剧了,求M,F的refer行么
问一道google的题Leetcode problems' difficulty
N台server,求median请教一个题,不太容易,要O(n)
发篇面经终于弄明白median of two sorted arrays了,发帖庆祝一下
这题有解吗?发包子请教大牛:scramble string这题递归的复杂度
相关话题的讨论汇总
话题: machine话题: range话题: 个数话题: 机器话题: median