1、给定 a、b 两个文件,各存放 50 亿个 url,每个 url 各占 64 字节,内存限制是 4G,让你找出 a、b 文件共同的 url
方 案 1: 可 以 估 计 每 个 文 件 安 的 大 小 为 50G×64=320G, 远 远 大 于 内 存 限 制 的 4G
所 以 不可 能 将 其 完 全 加 载 到 内 存 中 处 理
考 虑 采 取 分 而 治 之 的 方 法
s 遍 历 文 件 a,对 每 个 url求 取,然 后 根 据 所 取 得 的 值 将 url分 别 存 储 到 1000个 小 文 件 ( 记 为) 中
这 样 每 个 小 文 件 的 大 约 为 300M
s 遍 历 文 件 b,采 取 和 a 相 同 的 方 式 将 url 分 别 存 储 到 1000 个 小 文 件( 记 为)
这 样 处 理 后 , 所 有 可 能 相 同 的 url 都 在 对 应 的 小 文 件 () 中 ,不 对 应 的 小 文 件 不 可 能 有 相 同 的 url
然 后 我 们 只 要 求 出 1000 对 小 文 件 中 相 同 的 url 即 可
s 求 每 对 小 文 件 中 相 同 的url 时 , 可 以 把 其 中 一 个 小 文 件 的url 存 储 到hash_set 中
然 后遍 历 另 一 个 小 文 件 的 每 个url, 看 其 是 否 在 刚 才 构 建 的hash_set 中 , 如 果 是 , 那 么 就 是 共同 的 url, 存 到 文 件 里 面 就 可 以 了
方 案 2: 如 果 允 许 有 一 定 的 错 误 率 , 可 以 使 用 Bloom filter, 4G 内 存 大 概 可 以 表 示 340 亿bit
将 其 中 一 个 文 件 中 的 url 使 用Bloom f