mitbbs.com
  首页 -分类讨论区 - 海外生活 - 待字闺中版 - 同主题阅读文章
  首页
  分类广告
分类讨论区
  移民专栏
新闻中心
  精华区
  未名博客
  俱乐部
  未名形象秀
  未名黄页
  未名交友
  未名人才
未名交友
[更多]
[更多]
www.sustc.edu.cn/cn/joinus/hrnotes/
/yellowpage/ent_info.php?id=65133
同主题阅读:g电面,新鲜面经
[版面:待字闺中][首篇作者:akak4648] , 2013年01月28日15:16:40
[首页] [上页][下页][末页] [分页:1 2 ]
akak4648
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 1 ]

发信人: akak4648 (victor), 信区: JobHunting
标  题: g电面,新鲜面经
发信站: BBS 未名空间站 (Mon Jan 28 15:16:40 2013, 美东)


1. 一个log里有页面的访问记录,如何获得前1000popular的(hash_map + heap)
followup,log里存在多个machine里,我原先说每个maintain heap,后来经提醒不work,
改用每个存heap,然后merge,再提了些优化的方案.面试官基本满意。

2.一个很大的table存了query -> occurrence,如何随机获得1个query,概率是基于每个
query的occurrence,

1  2  3
20 10 30
获得第一个数的概率是 20/60.

这题我很纠结,我上来就想到因为大数据量,用resevior sampling的变版做(
constant space),边想边写边测弄了快半小时才弄出来,最后也解释了半天,其实也
有很直接的方法,把累加做个数组就行了,用bst搜素log(n),当时面试就是有点一根
筋。最后问了问组的情况,听口音感觉是同胞里的一个大牛,希望能水过。(突然想起
来介绍的时候他的名字不像是同胞的)



--

※ 修改:·akak4648 於 Jan 28 16:16:16 2013 修改本文·[FROM: 50.]
※ 来源:·WWW 未名空间站 海外: mitbbs.com 中国: mitbbs.cn·[FROM: 50.]

 
bejing
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 2 ]

发信人: bejing (), 信区: JobHunting
标  题: Re: g电面,上午10点半
发信站: BBS 未名空间站 (Mon Jan 28 15:34:54 2013, 美东)

谢谢分享,第一题是什么意思?
每个机器都维持一个min heap,最后再把这些heap们merge到一起吗?

【 在 akak4648 (victor) 的大作中提到: 】
: 1. 一个log里有页面的访问记录,如何获得前1000popular的(hash_map + heap)
: followup,log里存在多个machine里,我原先说每个maintain heap,后来经提醒不
work,
: 改用每个存heap,然后merge,再提了些优化的方案.面试官基本满意。
: 2.一个很大的table存了query -> occurrence,如何随机获得1个query,概率是基于每个
: query的occurrence,
: 1  2  3
: 20 10 30
: 获得第一个数的概率是 20/60.
: 这题我很纠结,我上来就想到因为大数据量,用resevior sampling的变版做(
: constant space),边想边写边测弄了快半小时才弄出来,最后也解释了半天,其实也
: ...................



--

※ 来源:·WWW 未名空间站 海外: mitbbs.com 中国: mitbbs.cn·[FROM: 130.]

 
akak4648
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 3 ]

发信人: akak4648 (victor), 信区: JobHunting
标  题: Re: g电面,上午10点半
发信站: BBS 未名空间站 (Mon Jan 28 16:14:47 2013, 美东)

嗯,是的
【 在 bejing () 的大作中提到: 】
: 谢谢分享,第一题是什么意思?
: 每个机器都维持一个min heap,最后再把这些heap们merge到一起吗?
: work,



--

※ 来源:·WWW 未名空间站 海外: mitbbs.com 中国: mitbbs.cn·[FROM: 50.]

 
bejing
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 4 ]

发信人: bejing (), 信区: JobHunting
标  题: Re: g电面,上午10点半
发信站: BBS 未名空间站 (Mon Jan 28 17:07:48 2013, 美东)

谢谢

第二题:
我看你用了binary search找那个数,耗时O(lg n),但是前面把数组累加已经耗时O
(n)了,
有没有办法耗时O(lg n)?

【 在 akak4648 (victor) 的大作中提到: 】
: 嗯,是的


--

※ 来源:·WWW 未名空间站 海外: mitbbs.com 中国: mitbbs.cn·[FROM: 130.]

 
justtry
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 5 ]

发信人: justtry (bug free), 信区: JobHunting
标  题: Re: g电面,新鲜面经
发信站: BBS 未名空间站 (Mon Jan 28 17:21:25 2013, 美东)

第二题:  对于小的 case怎么做阿
比如
1   2   3
20  10  30
那么 frequence 的sum 是  60
那么产生一个 [1  60] 之间的随机数 r
如果 r <= 20 , 返回 1
否则如果 r <=30 , 返回 2
否则 返回 3

问题是出来一个随机数 r, 怎么有效判断它所在的区间呢?



【 在 akak4648 (victor) 的大作中提到: 】
: 1. 一个log里有页面的访问记录,如何获得前1000popular的(hash_map + heap)
: followup,log里存在多个machine里,我原先说每个maintain heap,后来经提醒不
work,
: 改用每个存heap,然后merge,再提了些优化的方案.面试官基本满意。
: 2.一个很大的table存了query -> occurrence,如何随机获得1个query,概率是基于每个
: query的occurrence,
: 1  2  3
: 20 10 30
: 获得第一个数的概率是 20/60.
: 这题我很纠结,我上来就想到因为大数据量,用resevior sampling的变版做(
: constant space),边想边写边测弄了快半小时才弄出来,最后也解释了半天,其实也
: ...................


--

※ 来源:·BBS 未名空间站 海外: mitbbs.com 中国: mitbbs.cn·[FROM: 98.]

 
etpacino
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 6 ]

发信人: etpacino (etpacino), 信区: JobHunting
标  题: Re: g电面,新鲜面经
发信站: BBS 未名空间站 (Mon Jan 28 18:41:45 2013, 美东)

那么多的数累加不会overflow 么?
--

※ 来源:·WWW 未名空间站 海外: mitbbs.com 中国: mitbbs.cn·[FROM: 208.]

 
justtry
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 7 ]

发信人: justtry (bug free), 信区: JobHunting
标  题: Re: g电面,新鲜面经
发信站: BBS 未名空间站 (Mon Jan 28 18:42:17 2013, 美东)

怎么解决阿? 多谢

【 在 etpacino (etpacino) 的大作中提到: 】
: 那么多的数累加不会overflow 么?



--

※ 来源:·BBS 未名空间站 海外: mitbbs.com 中国: mitbbs.cn·[FROM: 98.]

 
akak4648
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 8 ]

发信人: akak4648 (victor), 信区: JobHunting
标  题: Re: g电面,新鲜面经
发信站: BBS 未名空间站 (Mon Jan 28 19:43:20 2013, 美东)

这是我当场写的,类似的思想是resevior sampling

1   2    3   4
40   30   20  10

int getO(int A[], int n)
{
  //check n <= 1
  int ret = 0;
  int totalweight = A[0];
  for(int i = 1; i < n; i++)
{
     totalwieght += A[i];
     int p = rand()%totalweight;
     if(p <= A[i]) ret = i;//
}
  return A[ret];
}

这个方法好处是不需要O(n)的空间,如果是支持多次查询,可以做一个array存累加值
,比如:

               1    2    3   4
              40   30   20  10
new array: 40   70   90  100
这样直接rand()%100,判断数落的空间,新建这个array要O(n),后面用binary search查
询,时间复杂度log(n).

大数据确实存在累加over flow,假如total weight远超过int size,而有一个weight就
是1,没法用正常方法取到。有个优化的方法就是对所有weight平均分下,先随机取出
期中一个,然后再进行上面的算法。在计算weight总值的时候要用到大数加减。不过面
试时间有限,这些都是后来想的。。。

【 在 justtry (bug free) 的大作中提到: 】
: 第二题:  对于小的 case怎么做阿
: 比如
: 1   2   3
: 20  10  30
: 那么 frequence 的sum 是  60
: 那么产生一个 [1  60] 之间的随机数 r
: 如果 r <= 20 , 返回 1
: 否则如果 r <=30 , 返回 2
: 否则 返回 3
: 问题是出来一个随机数 r, 怎么有效判断它所在的区间呢?
: ...................





--

※ 修改:·akak4648 於 Jan 28 19:47:45 2013 修改本文·[FROM: 50.]
※ 来源:·WWW 未名空间站 海外: mitbbs.com 中国: mitbbs.cn·[FROM: 50.]

 
pitstop
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 9 ]

发信人: pitstop (NSF_xNx), 信区: JobHunting
标  题: Re: g电面,新鲜面经
发信站: BBS 未名空间站 (Mon Jan 28 19:54:07 2013, 美东)

for循环里每次rand一下和for外面rand一次应该概率不同吧?感觉p应该放到外面?

【 在 akak4648 (victor) 的大作中提到: 】
: 这是我当场写的,类似的思想是resevior sampling
:  1   2    3   4
: 40   30   20  10
: int getO(int A[], int n)
: {
:   //check n <= 1
:   int ret = 0;
:   int totalweight = A[0];
:   for(int i = 1; i < n; i++)
:  {
: ...................



--

※ 来源:·WWW 未名空间站 海外: mitbbs.com 中国: mitbbs.cn·[FROM: 76.]

 
chym
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 10 ]

发信人: chym (出远门), 信区: JobHunting
标  题: Re: g电面,新鲜面经
发信站: BBS 未名空间站 (Mon Jan 28 19:59:39 2013, 美东)

1. Find 1000 popular URLs in a log.
对于这种log里找popular URL的题目,首先肯定是要用hash去保存每一个URL的
frequency。然后对于返回top k:option 1, sort, O(nlogn);option2,用一个
size为k的min_heap,O(nlogk)。
Follow up,如果log存在多个machine里,那么肯定是要merge result了。这个时候每
个machine如果只是存一个size为k的heap显然是不够的了。所以我们可以对于每个
machine:opt 1,sort the URL frequency;opt 2, use a min_heap to store all
URL frequency。这里个人感觉opt 1好一些。

2. Return a query based on the occurrence from a big table。
首先这个很大的table,也就是一个很大file,然后不能完全放入main memory里面,是
吧?那个这个其实跟“从一个大文件里随机取出一行”是一样道理的,只不过是加了
occurrence这个条件。思路就是依次从头开始取,然后统计,并且同时计算当前概率,
然后继续下一行。只需要扫描一遍即可。Pseudocode:
all_occur = 0;
chosen = “”;
for (query in table) {
    this_occur = query.occurence;
    all_occur += this_occur;
    if (random(0, all_occur) <= this_occur) chosen = query;
}
return chosen;


还望大家指点~~

--

※ 来源:·WWW 未名空间站 海外: mitbbs.com 中国: mitbbs.cn·[FROM: 169.]

 
chym
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 11 ]

发信人: chym (出远门), 信区: JobHunting
标  题: Re: g电面,新鲜面经
发信站: BBS 未名空间站 (Mon Jan 28 20:04:56 2013, 美东)

恩,你这个跟我想的一样。

【 在 akak4648 (victor) 的大作中提到: 】
: 这是我当场写的,类似的思想是resevior sampling
:  1   2    3   4
: 40   30   20  10
: int getO(int A[], int n)
: {
:   //check n <= 1
:   int ret = 0;
:   int totalweight = A[0];
:   for(int i = 1; i < n; i++)
:  {
: ...................



--

※ 来源:·WWW 未名空间站 海外: mitbbs.com 中国: mitbbs.cn·[FROM: 169.]

 
justtry
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 12 ]

发信人: justtry (bug free), 信区: JobHunting
标  题: Re: g电面,新鲜面经
发信站: BBS 未名空间站 (Mon Jan 28 20:05:04 2013, 美东)

thanks

【 在 chym (出远门) 的大作中提到: 】
: 1. Find 1000 popular URLs in a log.
: 对于这种log里找popular URL的题目,首先肯定是要用hash去保存每一个URL的
: frequency。然后对于返回top k:option 1, sort, O(nlogn);option2,用一个
: size为k的min_heap,O(nlogk)。
: Follow up,如果log存在多个machine里,那么肯定是要merge result了。这个时候每
: 个machine如果只是存一个size为k的heap显然是不够的了。所以我们可以对于每个
: machine:opt 1,sort the URL frequency;opt 2, use a min_heap to store
all
: URL frequency。这里个人感觉opt 1好一些。
: 2. Return a query based on the occurrence from a big table。
: 首先这个很大的table,也就是一个很大file,然后不能完全放入main memory里面,是
: ...................


--

※ 来源:·BBS 未名空间站 海外: mitbbs.com 中国: mitbbs.cn·[FROM: 98.]

 
justtry
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 13 ]

发信人: justtry (bug free), 信区: JobHunting
标  题: Re: g电面,新鲜面经
发信站: BBS 未名空间站 (Mon Jan 28 20:05:40 2013, 美东)

thanks.

【 在 akak4648 (victor) 的大作中提到: 】
: 这是我当场写的,类似的思想是resevior sampling
:  1   2    3   4
: 40   30   20  10
: int getO(int A[], int n)
: {
:   //check n <= 1
:   int ret = 0;
:   int totalweight = A[0];
:   for(int i = 1; i < n; i++)
:  {
: ...................


--

※ 来源:·BBS 未名空间站 海外: mitbbs.com 中国: mitbbs.cn·[FROM: 98.]

 
etpacino
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 14 ]

发信人: etpacino (etpacino), 信区: JobHunting
标  题: Re: g电面,新鲜面经
发信站: BBS 未名空间站 (Mon Jan 28 20:13:58 2013, 美东)

I think keeping track of the average should solve this problem
【 在 justtry (bug free) 的大作中提到: 】
: 怎么解决阿? 多谢



--

※ 来源:·WWW 未名空间站 海外: mitbbs.com 中国: mitbbs.cn·[FROM: 208.]

 
justtry
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 15 ]

发信人: justtry (bug free), 信区: JobHunting
标  题: Re: g电面,新鲜面经
发信站: BBS 未名空间站 (Mon Jan 28 20:24:37 2013, 美东)

能更仔细点吗?
thanks.

【 在 etpacino (etpacino) 的大作中提到: 】
I think keeping track of the average should solve this problem
【 在 justtry (bug free) 的大作中提到: 】
: 怎么解决阿? 多谢


--

※ 来源:·WWW 未名空间站 海外: mitbbs.com 中国: mitbbs.cn·[FROM: 98.]

 
peking2
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 16 ]

发信人: peking2 (scala), 信区: JobHunting
标  题: Re: g电面,新鲜面经
发信站: BBS 未名空间站 (Mon Jan 28 21:50:53 2013, 美东)

第二题纪录一个总数就可以了吧?
--
http://blog.sina.com.cn/leetcode

※ 来源:·WWW 未名空间站 海外: mitbbs.com 中国: mitbbs.cn·[FROM: 8.]

 
GAGAMA
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 17 ]

发信人: GAGAMA (GAGA), 信区: JobHunting
标  题: Re: g电面,新鲜面经
发信站: BBS 未名空间站 (Mon Jan 28 22:41:39 2013, 美东)

第2题应该不是你理解的那个意思。


【 在 chym (出远门) 的大作中提到: 】
: 1. Find 1000 popular URLs in a log.
: 对于这种log里找popular URL的题目,首先肯定是要用hash去保存每一个URL的
: frequency。然后对于返回top k:option 1, sort, O(nlogn);option2,用一个
: size为k的min_heap,O(nlogk)。
: Follow up,如果log存在多个machine里,那么肯定是要merge result了。这个时候每
: 个machine如果只是存一个size为k的heap显然是不够的了。所以我们可以对于每个
: machine:opt 1,sort the URL frequency;opt 2, use a min_heap to store
all
: URL frequency。这里个人感觉opt 1好一些。
: 2. Return a query based on the occurrence from a big table。
: 首先这个很大的table,也就是一个很大file,然后不能完全放入main memory里面,是
: ...................



--


※ 来源:·WWW 未名空间站 海外: mitbbs.com 中国: mitbbs.cn·[FROM: 174.]

 
runPython
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 18 ]

发信人: runPython (凸-.-), 信区: JobHunting
标  题: Re: g电面,新鲜面经
发信站: BBS 未名空间站 (Mon Jan 28 23:05:53 2013, 美东)

第一题的followup, 我认为每个machine维持一个大小为K的heap,
然后再合并为一个大小为K的heap,就是所要的结果,没有问题啊。



【 在 chym (出远门) 的大作中提到: 】
: 1. Find 1000 popular URLs in a log.
: 对于这种log里找popular URL的题目,首先肯定是要用hash去保存每一个URL的
: frequency。然后对于返回top k:option 1, sort, O(nlogn);option2,用一个
: size为k的min_heap,O(nlogk)。
: Follow up,如果log存在多个machine里,那么肯定是要merge result了。这个时候每
: 个machine如果只是存一个size为k的heap显然是不够的了。所以我们可以对于每个
: machine:opt 1,sort the URL frequency;opt 2, use a min_heap to store
all
: URL frequency。这里个人感觉opt 1好一些。
: 2. Return a query based on the occurrence from a big table。
: 首先这个很大的table,也就是一个很大file,然后不能完全放入main memory里面,是
: ...................



--

※ 来源:·WWW 未名空间站 海外: mitbbs.com 中国: mitbbs.cn·[FROM: 98.]

 
YooY
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 19 ]

发信人: YooY (abcdefg), 信区: JobHunting
标  题: Re: g电面,新鲜面经
发信站: BBS 未名空间站 (Mon Jan 28 23:06:09 2013, 美东)

第一题同一个页面可能在多个机器里吗?
比如说,一个页面在机器1里有1000个,在机器2里有2000个。所以这个页面的访问数是
3000.


【 在 akak4648 (victor) 的大作中提到: 】
: 1. 一个log里有页面的访问记录,如何获得前1000popular的(hash_map + heap)
: followup,log里存在多个machine里,我原先说每个maintain heap,后来经提醒不
work,
: 改用每个存heap,然后merge,再提了些优化的方案.面试官基本满意。
: 2.一个很大的table存了query -> occurrence,如何随机获得1个query,概率是基于每个
: query的occurrence,
: 1  2  3
: 20 10 30
: 获得第一个数的概率是 20/60.
: 这题我很纠结,我上来就想到因为大数据量,用resevior sampling的变版做(
: constant space),边想边写边测弄了快半小时才弄出来,最后也解释了半天,其实也
: ...................



--

※ 来源:·WWW 未名空间站 海外: mitbbs.com 中国: mitbbs.cn·[FROM: 76.]

 
YooY
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 20 ]

发信人: YooY (abcdefg), 信区: JobHunting
标  题: Re: g电面,新鲜面经
发信站: BBS 未名空间站 (Mon Jan 28 23:12:23 2013, 美东)

找top K可以用randomized partition, 可以average O(n)吧?

【 在 chym (出远门) 的大作中提到: 】
: 1. Find 1000 popular URLs in a log.
: 对于这种log里找popular URL的题目,首先肯定是要用hash去保存每一个URL的
: frequency。然后对于返回top k:option 1, sort, O(nlogn);option2,用一个
: size为k的min_heap,O(nlogk)。
: Follow up,如果log存在多个machine里,那么肯定是要merge result了。这个时候每
: 个machine如果只是存一个size为k的heap显然是不够的了。所以我们可以对于每个
: machine:opt 1,sort the URL frequency;opt 2, use a min_heap to store
all
: URL frequency。这里个人感觉opt 1好一些。
: 2. Return a query based on the occurrence from a big table。
: 首先这个很大的table,也就是一个很大file,然后不能完全放入main memory里面,是
: ...................



--

※ 来源:·WWW 未名空间站 海外: mitbbs.com 中国: mitbbs.cn·[FROM: 76.]

[首页] [上页][下页][末页] [分页:1 2 ]
[快速返回] [ 进入待字闺中讨论区] [返回顶部]
回复文章
标题:
内 容:

未名交友
将您的链接放在这儿

友情链接


 

Site Map - Contact Us - Terms and Conditions - Privacy Policy

版权所有,未名空间(mitbbs.com),since 1996