0.前言
本文主要介绍Zhang and Wang利用GK Summary的Merge与Prune操作来构建新的 ϵ−approximate quantile summary ,提出了A Fast quantile summary algorithm,速度非常快,注意本文的Compress操作即为Prune操作,因为论文使用该名词,保持一致。本文仅提取出关键内容加入笔者的个人理解,有错误还望谅解与告知。
1.算法思路
Zhang and Wang在论文先描述:1)数据量固定的算法,即已知数据量 N 。2)通过数据流分阶段,每个阶段数据量固定,因此可以将算法扩展到流式数据库场景,而不依赖先验的数据量
1.1 数据量固定的算法
首先考虑:数据量固定场景,论文提出多层 quantile summary 结构:
S={
s0,s1,...,sL}
其中 si 为第 i 级的
for ( i = i; i ≤ N; i++ )
{
insert vi into s0; //新进数据直接插入s0
if ( |s0| < b ) //s0没满,则继续插入
contiune;
sort s0; //s0满了,则排序并执行compress操作
sc = compress(s0, 1/b); //生成sc,1/b为prune增加误差,对应生成b/2个元素,s0误差为0
s0 = ∅;
for ( k = 1; k <= L; k++ )
{
if ( |sk| == 0 ) //sk是否为空
{
sk = sc; //为空,则加入sc
break;
} else {
tmp = merge(sk, sc); //否则,sc与sk进行merge,此时对应误差max(ϵk, 1/b)
sc = compress(tmp, 1/b); //ϵk为sk的误差,继续compress,max(ϵk, b/2) + 1/b
sk = ∅ //sk置空,可以归纳出,sk存在summary时,误差为k*(1/b)
} //上层误差比下层大。
}
}
方便理解,对应图示如下:
证明:对于第 k 层,出现满的状态,需要数据量为