Fantasy-JXF
  • Introduction
  • 机器学习
    • 机器学习基础
    • 机器学习实践
    • 机器学习算法
    • 集成学习
  • 深度学习
    • 深度学习基础
    • 深度学习实践
    • CNN
    • RNN
    • 优化算法
    • 序列建模
    • 《深度学习》整理
    • 术语表
  • 自然语言处理
    • NLP发展趋势
    • 自然语言处理基础
    • 句嵌入
    • 词向量
    • 多模态
    • 视觉问答(VQA)综述
    • 深度查询理解
      • 综述
  • 计算机视觉
    • 基本模型
  • 数学
    • 概率论
    • 微积分的本质
    • 深度学习的核心
  • 算法
    • 字符串
    • 数据结构
    • 数据结构Advanced
    • 双指针
    • 动态规划
    • 区间问题
    • 排列组合
    • 数学问题
    • 洗牌/采样/随机数
    • 大数运算
    • 海量数据处理
    • IO模板
    • 必备算法
    • LeetCode
    • 剑指Offer
    • 面试真题
  • 编程
    • C++基础
    • C++面向对象
    • C++左值与右值
    • Python基础
  • 笔试面经
    • 360
    • iHandy
    • 作业帮
    • 字节跳动
    • 小米
    • 度小满
    • 快手
    • 招行
    • 搜狐畅游
    • 滴滴
    • 爱奇艺
    • 百度
    • 百度2
    • 百度3
    • 百词斩
    • 腾讯
    • 迅雷
    • 顺丰
    • 旷视
    • 爱笔
    • 魔门塔
    • 搜狐
由 GitBook 提供支持
在本页
  • 备忘
  • Index
  • 判断一个整数是否在给定的 40 亿个(不重复)整数中出现过
  • Reference

这有帮助吗?

  1. 算法

海量数据处理

上一页大数运算下一页IO模板

最后更新于6年前

这有帮助吗?

备忘

  • 1 GB: 十亿个字节(Byte)

    1(B) * 10*10^8 / 1024 / 1024 ≈ 953.67(MB) ≈ 1000(MB) ≈ 1(GB)

  • 400 MB: 一亿个 4 字节(Byte) int 整型占用的内存

    4(B) * 10^8 / 1024 / 1024 ≈ 381.57(MB) ≈ 382(MB) ≈ 400(MB)

    • 10 亿个整型 -> 400(MB) * 10 = 4(GB)

    • 40 亿个整型 -> 4(GB) * 4 = 16(GB)

  • 12 MB: 一亿个比特(bit)占用的内存(相比于 int 型,节省了 32 倍内存)

    1(b) * 10^8 / 8 / 1024 / 1024 ≈ 11.92(MB) ≈ 12(MB)

    • 10 亿个比特 -> 12(MB) * 10 = 120(MB) ≈ 4(GB)/32 = 128(MB)

    • 40 亿个整型 -> 120(MB) * 4 = 480(MB) ≈ 16(GB)/32 = 500(MB)

Index

判断一个整数是否在给定的 40 亿个(不重复)整数中出现过

思路 1

  • BitMap

思路 2

  • Hash 分桶 + 排序 + 二分查找

思路 3

  • 外部排序 + 结构存储 + 二分查找

    • int 型整数的范围是 2^32 ≈ 42亿,那么对于 40 亿个整数,必然存在大量连续的范围

    • 排序后,必然存在大量以下情况:

      1 2 3 4  7 8 9  ...
    • 对于这种形式的序列,可以构造如下结构

      struct {
          start;        // 记录连续序列的开头
          n_continue;   // 连续字段的长度
      }
    • 则上述示例,可以存储为

      (1, 4), (7, 3), ...
  • 复杂度分析

    • 这样最差情况存在 2(=42-40) 亿个断点,即 2 亿个结构体,每个结构体占 8 个字节,共 400(MB) * 4 = 1.6(GB)

    • 每次查找的时间复杂度为 O(logN)

思路 4

  • 多机分布式

Reference

- CSDN博客

- CSDN博客

- CSDN博客

判断一个整数是否在给定的 40 亿个(不重复)整数中出现过
Reference
腾讯面试题:给定 40 亿个不重复的...
海量数据处理面试题集锦
十道海量数据处理面试题与十个方法大总结