返回信息流求问阿里去年秋招的一道c++题,一遇到这种题就一点思路也没有,求大牛们指点一下思路~~~~这种题要怎么入手的说~~~~~~
C++选做题
Part I
假设你有一台计算机,配置如下:
48GB内存
16核CPU,3.0GHz
12块2TB SATA硬盘
有两个数据文件A和B,A的大小是40GB,B的大小是2TB,A和B的文件格式一样,都包含等长的100字节的记录,记录的前20个字节表示key,后80个字节表示value,所有的key和value都由数字和大小写字母组成(0-9 A-Z a-z),同一个文件中的key没有排序,也没有重复。
文件A和B都切成了1GB(1*10^9字节)的数据块(名为A000001、A000002......A000010、B000001、B000002......B002000),均匀分布在6块硬盘上。
请问如何用最快的方法找到A和B之间共同的key,以及他们对应的value值(建议输出格式如下所示:<key><空格><A中对应value><空格><B中对应value>)
请描述你的方法里面用到的关键的数据结构和算法,估算这个方法需要的内存空间和运算时间,并说明你的推导过程。
Part II
如果你有100台服务器,每台配置如上描述,它们通过千兆网络组成一个集群,任意两台之间的带宽可以达到1000Mbps,同时假设文件A和B的大小也放大100倍(各位4TB和200TB),并且被切分成1GB的碎片,均匀分布在100台服务器上。
请问如何用最快的方法找到A和B之间共同的key,以及他们对应的value值(建议输出格式如下所示:<key><空格><A中对应value><空格><B中对应value>)
请描述你的方法里面用到的关键的数据结构和算法,估算这个方法需要的内存空间、网络流和运算时间,并说明你的推导过程。
这是一条镜像帖。来源:北邮人论坛 / cpp / #81727同步于 2014/8/25
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
求问一道去年阿里秋招的C++笔试大题思路
anna07
2014/8/25镜像同步11 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
一般不是分文件的时候就用hash么,这个已经给分好了,不知道分了有什么用
【 在 FromSixToTen 的大作中提到: 】
: 遇到大数据的问题一般用哈希。就是这些。关键看哈希表如何构建。
【 在 anna07 的大作中提到: 】
: 一般不是分文件的时候就用hash么,这个已经给分好了,不知道分了有什么用
接下来依然需要哈希
来自「北邮人论坛手机版」
说说自己的思路,没考虑算法,会比较慢,应该还有算法优化的方法。
1.对a,b切分的每一个小文件其每一行都为key,value,对每一行的的key进行hash(key),根据hash出来的值写到各个结果文件里面
2.这个时候每个结果里面的每一行都:
key,a_valule
.....
key,b_value
3.再用awk或者perl可以对每个结果文件进行处理可以得到key,a_value,b_value。
当然这种思路是完全没考虑时间,不过结果应该是正确的
我觉得如果要考虑时间快可能还是要考虑一下Bloom Filter这些