3.1 数据流中频繁元素(空间亚线性)
大数据的数据流模型
- 数据只能顺序扫描1次或几次
- 能够使用的内存是有限的
- 希望通过维护一个内存结果(数据概要)来给出相关性质的一个有效估计
维护中间结果 - 数据流模型适用于大数据
顺序扫描数据仅一次(时间保障)
内存亚线性(空间保障) - 来自某个域中的元素序列
<x1, x2, x3, x4, … > - 有限的内存:
内存<< 数据的规模
通常 O(logkn) 或 O(nα) for α<1 - 快速处理每个元素
从数据流中计算什么?
- 容易计算的函数: min, max, sum, …
使用单个寄存器 s, 直接更新 - 频繁元素:元素出现多次,希望找到出现最频繁的元素
Zipf原则: 典型的频率分布是高度偏斜的,只有少数频繁元素.
最多10%的元素占元素总个数的 90%.
Misra Gries(MG)算法
处理元素x
If 已经为x分配计数器,增加之
Else If 没有相应计数器,但计数器个数少于k,为x分配计数器,并设为1.
Else, 所有计数器减1.删除值为0的计数器.
一个计数器x 减少了几次?
⟺ 我们有几个减少计数器的步骤?
整个结构的权重(计数器的和)记作m′
整个数据流的权重(全部元素的数量)是m
每一个计数器降低的步骤减少k个计数,但是并未计入输入元素的此次出现,即k+1 次未计入的元素出现.
⇒ 最多有 m − m ′