Redian新闻
>
同学今天面AMAZON到一个题目不会 问我。我来这问一下
avatar
同学今天面AMAZON到一个题目不会 问我。我来这问一下# JobHunting - 待字闺中
H*7
1
写算法(数组中统计每个数出现的次数,返回大于K的数,典型的用HASHMAP的题目)用
到HASHMAP,
算法写OK了。
面试官提出:内存不够,表有几十个G。如何处理。
我想:如果SPLIT了数组。先把每一个出现的次数统计,然后COMBINE。这样的效率有点
低下。怎么是最优解?针对这个情
形。谢谢
avatar
j*u
2
单机还是多机啊?
单机的话,
我觉得可以第一遍scan大文件,range partition到N个小文件,根据内存大小来决定N
然后foreach小文件,用一个int array来in-memory count,count的同时如果发现等于K了就可
以输出了。每个小文件scan完后reset array。

【在 H******7 的大作中提到】
: 写算法(数组中统计每个数出现的次数,返回大于K的数,典型的用HASHMAP的题目)用
: 到HASHMAP,
: 算法写OK了。
: 面试官提出:内存不够,表有几十个G。如何处理。
: 我想:如果SPLIT了数组。先把每一个出现的次数统计,然后COMBINE。这样的效率有点
: 低下。怎么是最优解?针对这个情
: 形。谢谢

avatar
H*7
3
单机多机都可以 自己可以风情况讨论
avatar
H*7
4
这题目如何进行BITMAP?没想明白 请指点。

N
就可

【在 j*****u 的大作中提到】
: 单机还是多机啊?
: 单机的话,
: 我觉得可以第一遍scan大文件,range partition到N个小文件,根据内存大小来决定N
: 然后foreach小文件,用一个int array来in-memory count,count的同时如果发现等于K了就可
: 以输出了。每个小文件scan完后reset array。

avatar
j*u
5
我说错了,是int array
假设size是k,每次array[num%k]++就行了。

【在 H******7 的大作中提到】
: 这题目如何进行BITMAP?没想明白 请指点。
:
: N
: 就可

avatar
g*s
6

返回出现次数大于k的树?

【在 H******7 的大作中提到】
: 写算法(数组中统计每个数出现的次数,返回大于K的数,典型的用HASHMAP的题目)用
: 到HASHMAP,
: 算法写OK了。
: 面试官提出:内存不够,表有几十个G。如何处理。
: 我想:如果SPLIT了数组。先把每一个出现的次数统计,然后COMBINE。这样的效率有点
: 低下。怎么是最优解?针对这个情
: 形。谢谢

avatar
l*a
7
why not sort it first?
we can do external sort.
avatar
f*y
8
问一下,如果用hash function的话 不必每个可能的数字都申请空间
用array的话,不像字符,如果对每个可能出现的数字都申请空间的话,会不会很大呢?
然后如果array[num%k]++,那么num = k+1的话,1与k+1是不是会重复?
呵呵 我是新手 如果问的小白 不要介意哈

【在 j*****u 的大作中提到】
: 我说错了,是int array
: 假设size是k,每次array[num%k]++就行了。

avatar
j*u
9
1和k+1在第一步已经被分到不同的file里了,所以不会冲突
count完可以还原回原来的数字
比如size=100,array[1..100]在file1里表示1~100,file2里表示101~200, etc
我们不知道每个range究竟有多少数字,只能按照最坏情况下估计,这个时候hash反而不
如array efficient,而且当数字分布均匀的时候hash table占用的空间会比array还大


呢?

【在 f*******y 的大作中提到】
: 问一下,如果用hash function的话 不必每个可能的数字都申请空间
: 用array的话,不像字符,如果对每个可能出现的数字都申请空间的话,会不会很大呢?
: 然后如果array[num%k]++,那么num = k+1的话,1与k+1是不是会重复?
: 呵呵 我是新手 如果问的小白 不要介意哈

avatar
i*9
10
disk hash table
avatar
u*e
11
可否解释下为啥要用hash呢?
开个数组的就行吧

【在 H******7 的大作中提到】
: 写算法(数组中统计每个数出现的次数,返回大于K的数,典型的用HASHMAP的题目)用
: 到HASHMAP,
: 算法写OK了。
: 面试官提出:内存不够,表有几十个G。如何处理。
: 我想:如果SPLIT了数组。先把每一个出现的次数统计,然后COMBINE。这样的效率有点
: 低下。怎么是最优解?针对这个情
: 形。谢谢

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。