Fast Algorithm for GK Summary算法

本文介绍了Zhang和Wang提出的快速量化摘要算法,利用GK Summary的Merge和Prune操作,适用于固定数据量和流式数据场景。算法在固定数据量时采用多层结构,流式数据中通过分阶段处理,保持误差边界。空间复杂度为O(log2(ϵN)/ϵ),时间复杂度为O(log(log(ϵN)/ϵ))。
摘要由CSDN通过智能技术生成


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)通过数据流分阶段,每个阶段数据量固定,因此可以将算法扩展到流式数据库场景,而不依赖先验的数据量 N

1.1 数据量固定的算法

  首先考虑:数据量固定场景,论文提出多层 quantile summary 结构:

S={ s0,s1,...,sL}

  其中 si 为第 i 级的 quantile summary b=log(ϵN)/ϵ ,为每级 summary 的最大个数,算法流程如下:

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 层,出现满的状态,需要数据量为 N/(2k×b) 个数据。因此, L 层的 summary L 层最多只能1次为满,则:
N/(2
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值