Skip to content

5亿个int找中位数

AstroMen edited this page Jan 2, 2017 · 1 revision

统计各个区域的数

首先我们将 int 划分为 2^16 个区域,然后读取数据统计落到各个区域里的数,之后我们根据统计结果就可以判断中位落到那同时知道这个区域中的第几大数刚好是位。然后二次扫描我们只统计落在那些数就可以了。

确定子区

实际上,如果不是 int 是 int64,我们可以经过 3 次这样的划分即可降低到以接受程度。即可以先将 int64 分成 2^24 个区域,然后确定的第几大数在将该分成 2^20 个子区域,然后确定是子区的第几大数,然后确定是子区的第几大数里个只有 2^20,就可以直接利用direct addr table 进行统计了。

STL
  标准STL序列容器
  * vector
  * string
  * deque
  * list
  标准STL Associative Container
  * set
  * multiset
  * map
  * multimap
  非标准关联容器
  * hash_set
  * hash_multiset
  * hash_map
  * hash_multimap
  * unordered_set
  * unordered_multiset
  * unordered_map
  标准非STL容器
  * array
  * stack
  * queue
  * hash_multimap
  数据结构的对比

笔记
  常用头文件
  用法注意
  位运算

常见面试题
  面试题词汇
  TopK
  5亿个int找中位数
  多线程-生产者消费者模式

Suggestion
  * Suggestion for job

Clone this wiki locally