《大数据算法》一3.5 寻找频繁元素的随机算法

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 本节书摘来华章计算机《大数据算法》一书中的第3章 ,第3.5节,王宏志 编著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。 3.5 寻找频繁元素的随机算法 本节重新研究3.3节中讨论的问题,提出寻找频繁元素的随机算法。

本节书摘来华章计算机《大数据算法》一书中的第3章 ,第3.5节,王宏志 编著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.5 寻找频繁元素的随机算法

本节重新研究3.3节中讨论的问题,提出寻找频繁元素的随机算法。Misra-Gries算法通过扫描数据一次提供足够的信息,然后通过第二次扫描数据解决频繁元素发现问题,即扫描数据第一次过程中Misra-Gries算法计算一个数据结构,对于j∈[n]该数据结构可以获得其频率fj的足够准确估计fj。本小节提出另外两个频率估计的随机算法。

3.5.1 略图法

1.略图和线性略图
在处理数据流σ的过程中,令image表示Misra-Gries算法中所需的数据结构。这种数据结构的一个缺点是缺少一种通用的方法从imageimage中计算image其中“”代表数据流的连接。很明显,需要这种数据结构上的连接操作,如果一个数据结构支持这种连接操作,则该数据结构称为略图,具体定义如下。
  定义3-3 D(σ)是一种以流的方式处理流σ的数据结构,这种数据结构称为略图,如果有一个空间有效组合算法COMB,对于任意两个数据流σ1和σ2,计算
image
本节的每个算法都有很好的性质,就定义3-3的意义而言,这些算法能计算输入流的略图。因为这些算法要计算由σ决定的频率向量f(σ),它们的略图会自然成为f(σ)的函数。事实上,它们应当是线性函数,这涉及另外一个定义。
  定义3-4 略图算法“sk”称为线性略图,如果对于每个域[n]上的数据流σ,sk(σ)的取值范围在l=l(n)维的向量空间上,并且sk(σ)是f(σ)的线性函数。在这种情况下,l称为线性略图的纬度。
注意,对于线性略图的结合算法只是仅仅在相应向量空间上增加略图。
除了不能产生略图,Misra-Gries算法还有其他缺点,就是不能延伸到十字转门(甚至严格的十字转门)模型。但是本节的算法能够实现,因为基于线性略图的数据流算法从一般模型到十字转门模型都是通用的。如果在一般模型中的j使我们向略图增加一个向量vj,然后十字转门模型中修正的(j,c)在略图中增加cvj,这样可以处理c≥0和c<0的不同情况。
2.计数略图
现在我们描述第一个略图算法,称为“计数略图”。我们从基本略图开始讨论,这个略图已经包含了大部分所需思想。这个略图有一个极小并且是正数的精度参数ε。算法3-5 元素频率计数略图算法

初始化:
1 C[1,…,k]←0,其中k=3/ε2;
2 从2通用函数族中随机选择哈希函数h:[n]→[k];
3 从2通用函数族中随机选择哈希函数g:[n]→{-1,1};
处理(j,c):
4 C[h(j)]←C[h(j)]+cg(j);
输出:
5 对于查询a,输出f→a=g(a)C[h(a)]。

通过这个算法计算的略图是一个计数器数组C,这个数组可以看作zk上的一个向量。若要使两个略图是可结合的,则它们必须基于同样的哈希函数h和g。
使用该算法,对数据流片段给出的示例如图3-3所示。依据(j,c)值不断计算h(j)、g(j)使用image更新C[h(j)]的值。计算过程如下:

image


image
image
针对每个数据流计算其h(j)、g(j),更新C[h[j]]的值。对于查询a使用最后更新数组C进行计算,输出估计值。
3.计数略图质量分析
定理3-6 对于任意查询a,算法3-5生成的估计满足image
证明 固定查询a,考虑基于查询a的输出X=fa。对于每个j∈[n],当h(j)=h(a)时,让Yj作为指示器,有image
0,h(j)≠h(a)  检查算法的工作原理,我们发现当且仅当h(j)=h(a)时,j对计数器C[h(a)]有贡献,并且贡献的总和是随机符号g(j)的fj倍。因此,image因为g和h是独立的,所以有image因此,通过期望的线性度,有image因此,输出X=fa是一个对于所需频率fa的无偏估计量。
我们仍然需要证明X不可能偏离其平均值太多。为此,我们分析其差异。根据2-通用哈希函数族的性质,对于每个image
image 下一步,我们利用g所对应2-通用函数族的性质,以及g和h的独立性,可总结出对于所有image有 因此可计算得到image(根据式(3-9)、式(3-11)和式(3-12))
image(3-13)其中f=f(σ)是由σ决定的频率分布。从式(3-10)到式(3-13),用切比雪夫不等式得到image  对于image
,我们定义f-j为(n-1)维的向量,这个向量通过去掉输入f的第j维元素得到,有image因此,我们可以用下面这个更加深刻的形式重写上面的公式。image.改进略图
略图即通常所说的“计数略图”,这实际上是通过对上述基本略图应用中位数技巧(参见3.4节)获得的略图,对于给定的足够小的δ>0,使其错误的概率降到δ。因此,计数略图可看作二维计数器数组,其中每一个数据流中的元素导致流中若干计数器的更新。为了完整起见,我们用下述算法讨论之。

初始化:
1 C[1,…,t][1,…,k]←0,其中k=3/ε2且t=O(log(1/δ));
2 从2通用哈希函数族中随机选择哈希函数h1,…,ht:[n]→[k],
3 从2通用哈希函数族中随机选择哈希函数g1,…,gt:[n]→[lk];
处理(j,c):
4 for i=1 to t do C[i][hi(j)]←C[i][hi(j)]+cgi(j);
输出:
5 对于查询a,输出fa=median1≤i≤tgi(a)C[i][hi(a)]。

像3.4节一样,可以使用一个标准的切尔诺夫界参数证明估计量fa满足Pr[fa-fa≥εf-a2]≤δ通过适当选择哈希函数族,我们能将哈希方程存储在O(tlog n)的空间。在略图中的每个tk计数器占据O(log m)的空间。这就给我们一个整体的限制空间image,即image 计数最小略图
另一种频率评估的解决方案就是所谓的“计数最小略图”。与计数略图相同,这个略图也采用一个精度参数ε和一个误差概率参数δ,并包含一个t×k的二维计数数组,用基于哈希函数的方法来更新。t和k的值基于ε和δ来设置,伪代码如下所示。算法3-6 计数最小略图算法

初始化:
1 C[1,…,t][1,…,k]←0→,其中k=2/ε,t=log(1/δ);
2 从2通用哈希函数族中选取t个哈希函数h1,…,ht:[n]→[k];
处理(j,c):
3 for i=1 to t do C[i][hi(j)]←C[i][hi(j)]+c;
输出:
4 在查询a中,令fa=min1≤i≤tC[i][hi(a)]。

注意这个算法相比计数略图简单了很多,另外,还要注意其占用空间为image这要比计数略图好1/ε倍。计数最小略图的缺点在于它的近似比保证,这也是我们接下来将要分析的。
计数最小略图质量分析
我们关注当每个流中的元素(j,c)满足c>0的情况,也就是现金注册模型,显然,在这种情况下,每个对应元素a的计数器image是对fa的过高估计,这样总有image其中fa是算法输出的fa的评估。
定理3-7 image
证明 对于固定的a,现在我们分析在计数器image中超出真实值的部分。令随机变量Xi表示超出真实值的部分。对于image,令Yi,j作为事件hi(j)=hi(a)的指示。注意当且仅当Yi,j=1且被触发时,j作用于计数器C[i][hi(a)],它使得fj被加入这个计数器。这样有image由于hi是2通用哈希函数族,因此得到image这样,通过数学期望的线性可加性可得image对于每个fj≥0,有Xi≥0,我们可以通过选择的k值应用马尔可夫不等式得到image 上述概率是对于一个计数器进行分析的结果。我们有t个这样的计数器,且它们相互独立。输出中的fa-fa是Xi中的最小值,其中i∈[t]。这样有image
≤12t通过对t的选择,可以让这个概率最大为δ。■
至此,我们证明了,最高概率时,有image其中左不等式总是成立,右不等式在概率为最大δ时失效。
这个评估弱于计数略图,其原因是它的偏差以εf-a1为界,而不是εf-a2。对于所有矢量z∈Rn,有image这个不等式在z有一个非零项时是紧的。且当z中所有值的绝对值都相等时最弱,此时两个范数相差因子n。这样,当流的频率向量更加分散时,与计数最小略图相比,计数略图的评估质量将会提升。

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
相关文章
|
1月前
|
机器学习/深度学习 自然语言处理 算法
【数据挖掘】金山办公2020校招大数据和机器学习算法笔试题
金山办公2020校招大数据和机器学习算法笔试题的解析,涵盖了编程、数据结构、正则表达式、机器学习等多个领域的题目和答案。
62 10
|
1月前
|
算法
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
|
2月前
|
机器学习/深度学习 算法 搜索推荐
从理论到实践,Python算法复杂度分析一站式教程,助你轻松驾驭大数据挑战!
【7月更文挑战第22天】在大数据领域,Python算法效率至关重要。本文深入解析时间与空间复杂度,用大O表示法衡量执行时间和存储需求。通过冒泡排序(O(n^2)时间,O(1)空间)与快速排序(平均O(n log n)时间,O(log n)空间)实例,展示Python代码实现与复杂度分析。策略包括算法适配、分治法应用及空间换取时间优化。掌握这些,可提升大数据处理能力,持续学习实践是关键。
45 1
|
2月前
|
存储 监控 算法
「AIGC算法」大数据架构Lambda和Kappa
**Lambda与Kappa架构对比:** Lambda提供批处理和实时处理,保证数据最终一致性,但维护复杂。Kappa简化为单一流处理,易于维护,适合实时场景,但可能增加实时处理压力,影响稳定性。选择时考虑数据一致性、系统维护、成本和实时性需求。
68 0
「AIGC算法」大数据架构Lambda和Kappa
|
3月前
|
分布式计算 算法 Java
阿里云ODPS PySpark任务使用mmlspark/synapseml运行LightGBM进行Boosting算法的高效训练与推理
阿里云ODPS PySpark任务使用mmlspark/synapseml运行LightGBM进行Boosting算法的高效训练与推理
|
3月前
|
存储 算法 Java
Java查找算法概览:二分查找适用于有序数组,通过比较中间元素缩小搜索范围;哈希查找利用哈希函数快速定位,示例中使用HashMap存储键值对,支持多值关联。
【6月更文挑战第21天】Java查找算法概览:二分查找适用于有序数组,通过比较中间元素缩小搜索范围;哈希查找利用哈希函数快速定位,示例中使用HashMap存储键值对,支持多值关联。简单哈希表实现未涵盖冲突解决和删除操作。
36 1
|
2月前
|
机器学习/深度学习 数据采集 算法
【机器学习】CART决策树算法的核心思想及其大数据时代银行贷款参考案例——机器认知外界的重要算法
【机器学习】CART决策树算法的核心思想及其大数据时代银行贷款参考案例——机器认知外界的重要算法
|
3月前
|
算法
【数据结构与算法 刷题系列】移除链表元素
【数据结构与算法 刷题系列】移除链表元素
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
AI大模型的核心成功因素通常可以归结为三大要素:大数据、大算力和强算法。
AI大模型的核心成功因素通常可以归结为三大要素:大数据、大算力和强算法。
117 0
|
13天前
|
存储 大数据 数据挖掘
【数据新纪元】Apache Doris:重塑实时分析性能,解锁大数据处理新速度,引爆数据价值潜能!
【9月更文挑战第5天】Apache Doris以其卓越的性能、灵活的架构和高效的数据处理能力,正在重塑实时分析的性能极限,解锁大数据处理的新速度,引爆数据价值的无限潜能。在未来的发展中,我们有理由相信Apache Doris将继续引领数据处理的潮流,为企业提供更快速、更准确、更智能的数据洞察和决策支持。让我们携手并进,共同探索数据新纪元的无限可能!
56 11

热门文章

最新文章