恐怖级算法题目一【据说是百度的面试题】

给你a、b两个文件,各存放50亿条url,每条url各占用64字节,内存限制是4G,让你找出a、b文件共同的url。

============================
对于此题,若用算法求解,关键在于内存不够大。而解决办法,必然需要通过预处理,将文件分割。但本题的技巧,也在于文件的分割,一个合理的分割,可以使后续的算法非常简单。

下述算法由他人给出:
1,内存放不到,可能需要借助外存
(1),读取文件,计算HASH,按HASH值分段放入不同的文件,文件数可以比较多,两个文件的URL,分开不同的文件放(a1,a2,...,b1,b2,...),保存时可以把HASH值也保存进去,避免再次计算HASH值
(2),对每一个HASH段,读出两个文件中的一个,比如a1,对HASH值有冲突的放一个连表里,然后读b1文件,取HASH值和URL,如果HASH值在a1中有,则进一步判断URL是否相同。

注:由于a1和b1的哈希段跟其他均不相同,故,a1只需要跟b1做比较,即可。


==============

另,如果只要结果,不需要算法,那借助于数据库,抑或也可:

建个数据库表,就一个主键,
然后把URL全部insert into table 。
插入失败报重复错误的,就是了。
posted @ 2009-12-14 20:54  傲衣华少  阅读(482)  评论(0编辑  收藏  举报