恐怖级算法题目一【据说是百度的面试题】
恐怖级算法题目一【据说是百度的面试题】 日期:2008-06-03 14:24
给你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 。
插入失败报重复错误的,就是了。
============================
对于此题,若用算法求解,关键在于内存不够大。而解决办法,必然需要通过预处理,将文件分割。但本题的技巧,也在于文件的分割,一个合理的分割,可以使后续的算法非常简单。
下述算法由他人给出:
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 。
插入失败报重复错误的,就是了。