• 前言
  • 算法思路
    • 1 数据量固定的算法
    • 2 数据量固定的算法复杂度
    • 3 流式数据算法
    • 4 流式算法复杂度分析
  • 参考文献

0.前言

  本文主要介绍Zhang and Wang利用GK Summary的Merge与Prune操作来构建新的ϵ−approximate quantile summary\epsilon-approximate \ quantile \ summary,提出了A Fast quantile summary algorithm,速度非常快,注意本文的Compress操作即为Prune操作,因为论文使用该名词,保持一致。本文仅提取出关键内容加入笔者的个人理解,有错误还望谅解与告知。

1.算法思路

  Zhang and Wang在论文先描述:1)数据量固定的算法,即已知数据量NN。2)通过数据流分阶段,每个阶段数据量固定,因此可以将算法扩展到流式数据库场景,而不依赖先验的数据量NN。

1.1 数据量固定的算法

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

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

S = \{ s_0, s_1, ..., s_L \}
  其中 sis_i为第 ii级的quantile summaryquantile \ summary, b=⌊log(ϵN)/ϵ⌋b = \lfloor \log(\epsilon N)/\epsilon \rfloor,为每级 summarysummary的最大个数,算法流程如下:

for ( i = i; i ≤ N; i++ )
{insert vi into s0;                 //新进数据直接插入s0if ( |s0| < b )                    //s0没满,则继续插入contiune; sort s0;                           //s0满了,则排序并执行compress操作sc = compress(s0, 1/b);            //生成sc,1/b为prune增加误差,对应生成b/2个元素,s0误差为0s0 = ∅;for ( k = 1; k <= L; k++ )     {if ( |sk| == 0 )               //sk是否为空{sk = sc;                   //为空,则加入scbreak;} 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/bsk = ∅                     //sk置空,可以归纳出,sk存在summary时,误差为k*(1/b)}                              //上层误差比下层大。}
}

  方便理解,对应图示如下:

   证明:对于第 kk层,出现满的状态,需要数据量为N/(2k×b)N/(2^k×b)个数据。因此, LL层的summarysummary, LL层最多只能1次为满,则:

N/(2L×b)≤1⇒2L≤N/b⇒L≤log(N/b)          (b=⌊log(ϵN)/ϵ⌋)=log(ϵN/log(ϵN))=log(ϵN)−log(log(ϵN))<log(ϵN)

N/(2^L×b) ≤ 1 \Rightarrow 2^L ≤ N/b \\ \begin{align} \Rightarrow L &\leq log(N/b) \ \ \ \ \ \ \ \ \ \ (b = \lfloor log(\epsilon N)/ \epsilon \rfloor) \\ &=log( \epsilon N/log(\epsilon N) ) \\ &= \log( \epsilon N ) - \log( log(\epsilon N) ) \\ &

  对于第kk层,对应误差为ϵk=k/b\epsilon_k = k/b, 最大误差是LL层对应ϵL\epsilon_L:

sL=L/⌊log(ϵN)/ϵ⌋<log(ϵN)/(log(ϵN)/ϵ)<ϵ

\begin{align} s_L&=L/\lfloor log(\epsilon N)/\epsilon \rfloor \\ &

  最终查询时,会将所有层的summary mergesummary \ merge一起:

S=Merge(s0,s1,...,sk)

S = Merge(s_0, s_1, ..., s_k)

  SS误差约束:

ϵ′=max(ϵ0,ϵ1,...,ϵk)=sL<ϵ

\epsilon' = max(\epsilon_0, \epsilon_1, ..., \epsilon_k) = s_L

  上述可见,bb设置极其巧妙。

1.2 数据量固定的算法复杂度

  论文给出算法的空间复杂度为:

O(bL)=log(ϵN)/ϵ×log(N/b)≤log2(ϵN)/ϵ

O(bL)=\log(\epsilon N)/\epsilon \times \log(N / b) \leq \log^2(\epsilon N)/\epsilon
  GK Summary算法的空间复杂度O(log(ϵN)/ϵ)O(\log(\epsilon N)/\epsilon), 可见Fast的算法复杂度更优。

  论文给出平均每个元素summarysummary更新时间复杂度为:O(log(log(ϵN)/ϵ))O(\log(\log(\epsilon N)/\epsilon)),几乎近似于常熟复杂度。时间复杂度等价于GK Summary最好情况的复杂度,而GK Summary最差情况的复杂度为O(log(ϵN)/ϵ)O(\log(\epsilon N)/\epsilon),时间复杂度证明:

  算法主要是s0s_0执行compresscompress,从无序数据到有序的summarysummary,因此s0s_0只需要排序+compresscompress,每次排序复杂度是blogbb\log b, compresscompress为b/2b/2, 总共需要执行N/bN/b次。而对于其他层(i>0i>0),因为mergemerge下层summarysummary已经是有序,因此对于第ii层来说需要简单merge+compressmerge+compress, mergemerge复杂度为2b2b, compresscompress复杂度为b,需要执行N/(2ib)N/(2^ib),因此计算时间为:

Nlogb+N/2+∑i=1LN2ib3b=O(Nlog(log(ϵN)/ϵ))

Nlogb + N / 2 + \sum_{i=1}^L\frac N{2^ib}3b=O(N\log(\log(\epsilon N)/\epsilon))

1.3 流式数据算法

  现在考虑流式数据场景,论文将流式数据进行分阶段进行构建summary,将流按照对于大小来分段。阶段1为00~1/ϵ1/\epsilon数据,阶段2为1/ϵ1/\epsilon~3/ϵ3/\epsilon数据,阶段nn对应(2n−1−1)/ϵ(2^{n-1}-1)/\epsilon~(2n−1)/ϵ(2^n-1)/\epsilon数据。数据流式不断增加,对应nn也不断变大,每个阶段,数据长度是固定的,阶段ii,数据长度为定值2i−1/ϵ2^{i-1}/\epsilon。因此,可以套用上述讲到的数据量固定算法,具体思路是将每个阶段生成的误差边界都保持在ϵ\epsilon,但是却是通过Compress(Merge(s0,s1,...sL),ϵ/2)Compress(Merge(s_0,s_1,...s_L), \epsilon/2)(不同于直接限定误差ϵ\epsilon,只需要进行merge,compress操作能减少summary个数),每个阶段生成2/ϵ+12/\epsilon+1个summarysummary,最终merge每个阶段生成的summarysummary,情况如下图所示。

  算法流程如下:

S = ∅;SC = ∅; k = 0; N = 1/ε; //初始化值while ( not EOS ){ e = next element in stream; //流式系统新数据n++;               SC = Update(e, SC, ε/2);  // 调用上述固定长度的fast quantile算法,生成对应summaryif ( n == N)              // 第i阶段结束{// 下面过程生成第i阶段的summary SC,误差边界ε/2s_all = s0;for ( i = 1; i <= L; i++ ){s_all = Merge(s_all, si);}Sk = compress( s_all, ε/2);  // 将summary compress到2/ε,减少summary数S = S ∪ Sk;                 // 合并所有阶段summarySC = ∅;        // 重置n = 0;N = 2×N;}}

  生成最终summarysummary算法如下:

// 直接结束当前阶段,生成summary
if ( SC != empty; )
{      s_all = s0;for ( i = 1; i <= L; i++ ){s_all = Merge(s_all, si);}             Sk = compress( s_all, ε/2 );
}
// merge所有的阶段的summary
S = S0
for ( i = 1; i ≤ k; i++ )S = Merge(S, Si);

1.4 流式算法复杂度分析

  论文给出空间复杂度:O(log2(ϵN)/ϵ)O(\log^2(\epsilon N)/\epsilon ) , 时间复杂度为:O(log(log(ϵN)/ϵ))O(\log(\log(\epsilon N)/\epsilon)),证明:整个过程等价于最新阶段summarysummary计算复杂度。


参考文献

  1. A fast algorithm for approximate quantiles论文: https://pdfs.semanticscholar.org/03a0/f978de91f70249dc39de75e8958c49df4583.pdf
  2. Emory大学Stream DB System课程关于A Fast Algorithm算法材料:
    http://www.mathcs.emory.edu/~cheung/Courses/584-StreamDB/Syllabus/08-Quantile/Zhang.html
  3. Emory大学Stream DB System课程关于A Fast Algorithm算法材料:
    http://www.mathcs.emory.edu/~cheung/Courses/584-StreamDB/Syllabus/08-Quantile/Zhang2.html

Fast Algorithm for GK Summary算法相关推荐

  1. 分布式GK Summary算法

    前言 背景 分布式GK Summary算法 1 Merge操作 2 Prune操作 参考文献 0.前言   本文主要介绍分布式GK Summay算法,考虑分布式流式数据库场景,博客内容来源主要是原始论 ...

  2. GK Summay算法(ϵ−approximate ϕ−quantile)

    前言 背景 GK Summary算法 1 GK Summary定义 2 GK Summary插入insert 3 GK Summary删除delete与compress 4 GK Summary算法 ...

  3. Python+OpenCV:图像快速角点检测算法(FAST Algorithm for Corner Detection)

    Python+OpenCV:图像快速角点检测算法(FAST Algorithm for Corner Detection) 理论 Feature Detection using FAST Select ...

  4. Sequential Minimal Optimization: A Fast Algorithm for Training Support Vector Machines 论文研读

    摘要 本文提出了一种用于训练支持向量机的新算法:序列最小优化算法(SMO).训练支持向量机需要解决非常大的二次规划(QP)优化问题.SMO 将这个大的 QP 问题分解为一系列最小的 QP 问题.这些小 ...

  5. Algorithm:树相关算法(BBT/BST/B树/R树)简介(二叉查找树、二叉查找树的插入节点、二叉查找树的删除、二叉树的遍历、平衡二叉树)C 语言实现

    Algorithm:树相关算法(BBT/BST/B树/R树)简介(二叉查找树.二叉查找树的插入节点.二叉查找树的删除.二叉树的遍历.平衡二叉树)C++语言实现 目录 树的基础知识 1.二叉树的遍-前序 ...

  6. 蝙蝠算法(Bat Algorithm,BA)算法

    生物学基理 蝙蝠算法(Bat Algorithm,BA)算法是模拟自然界中蝙蝠利用一种声呐来探测猎物.避免障碍物的随机搜索算法即模拟蝙蝠利用超声波对障碍物或猎物进行最基本的探测.定位能力并将其和优化目 ...

  7. algorithm中的排序算法详解

    文章目录 前言 一.algorithm是什么? 二.有哪些排序算法? sort random_shuffle merge reverse 总结 前言 雨下不停,爱意难眠,说一下algorithm中的几 ...

  8. 贪心算法(Greedy Algorithm)最小生成树 克鲁斯卡尔算法(Kruskal#39;s algorithm)

    克鲁斯卡尔算法(Kruskal's algorithm)它既是古典最低的一个简单的了解生成树算法. 这充分反映了这一点贪心算法的精髓.该方法可以通常的图被表示.图选择这里借用Wikipedia在.非常 ...

  9. 社区发现算法 - Fast Unfolding(Louvian)算法初探

    1. 社团划分 0x1:社区是什么 在社交网络中,用户相当于每一个点,用户之间通过互相的关注关系构成了整个网络的结构,在这样的网络中,有的用户之间的连接较为紧密,有的用户之间的连接关系较为稀疏,在这样 ...

最新文章

  1. VS2019生成C++开发的exe文件可以在无VS的PC上运行的方法
  2. Nimbus/Supervisor本地目录结构
  3. FFT ---- 2021牛客多校第一场 H Hash Function
  4. python添加excel模块_python操作Excel模块openpyxl
  5. flex label 换行
  6. 【转】带你玩转Visual Studio——04.带你高效开发
  7. C++:new[]和delete[]一定要配对使用吗?
  8. Android Studio 3.4功能
  9. 《华为工作法》学习笔记
  10. 高中信息技术python知识点_高中信息技术《Python语言》模块试卷
  11. Python 判断素数(循环结构)
  12. 锁的等级:方法锁、对象锁、类锁。
  13. WebRTC之视频采集
  14. ae合成设置快捷键_这些AE技巧,相见恨晚
  15. php validate,jQuery Validate | 菜鸟教程
  16. 【Gitee + Hexo】从0开始搭建自己的博客网站
  17. 例题 9-27 方块消除(Blocks, UVa10559)
  18. 【C++】智力题总结
  19. 数字图像处理作业-医学图像浏览器
  20. RDD:基于内存的集群计算容错抽象(转)

热门文章

  1. Could not find any downloads that satisfy the requirement tensorflow
  2. 谁发明了计算机人工智能,麻省理工学院发明了人工智能芯片
  3. Android下QQ空间查看大图特效
  4. Lambda表达式用法超详细整理!!!
  5. 泰拉瑞亚 (Terraria v1.4.1.2) ---PC
  6. 正则表达式匹配手机号、QQ号、邮箱
  7. 尘埃粒子计数的价格以及使用注意事项
  8. 免屏实现精准较时设定,WT588F02B-8S(C006_03)电子语音药盒解决方案
  9. 支付渠道接入设计及实现
  10. 爬瓜子二手车(json接口)