查找两个大文件共同的URL
给定 a、b 两个文件,各存放 50 亿个 URL,每个 URL 各占 64B,找出 a、b 两个文件共同的 URL。内存限制是 4G。
-
操作逻辑:
-
使用哈希函数 hash(URL) % 1000 将每个URL映射到0-999的编号
- 文件A切割为a0, a1, ..., a999,每个约300MB;文件B同理切割为b0, b1, ..., b999
-
关键保证:
相同URL必被哈希到同一编号的小文件。例如,URL "http://example.com"在文件A中分配到a42,则在文件B中也必分配到b42匹配规则:
仅需比较同一编号的ai与bi,无需跨文件比较(如a3只与b3对比) -
`
-
-
为什么必须用哈希分治?直接排序再归并行吗?
排序归并的瓶颈:
直接排序需将320GB文件全部排序,归并时仍需多次I/O,总耗时比分治法更高- 哈希分治的优势:
通过哈希值直接定位对应文件对,减少无效比较次数
- 哈希分治的优势:
-
哈希冲突会导致错误吗?
不影响正确性:
哈希冲突仅影响不同URL被分到同一文件,但匹配时通过精确比对HashSet中的原始URL可避免误判