重磅推荐
【编辑推荐】

概率数据结构是一类主要基于不同散列技术的数据结构的统称。与常规的(或确定性的)数据结构不同的是,概率数据结构总是提供近似的答案,但也提供了可靠的方法来估计可能产生的误差。幸运的是,这些潜在的损失和误差可以通过极低的内存需求、恒定的查询时间和可扩展性得到充分的补偿,而这些因素在大数据应用中十分重要。

本书不可能涵盖所有现有的出色解决方法,而是重点介绍它们的共同思想和重要的应用领域,包括成员查询、计数、流数据挖掘和相似度估计。

阅读本书,你将:

本书的目的是向包括软件架构师、开发人员以及技术决策者在内的技术从业者介绍概率数据结构与算法。通过阅读本书,你将对概率数据结构有理论和实践层面的理解,同时了解它们的常见用途。


【内容简介】

本书共6章。每章都专门针对大数据应用中的一个特定问题,首先对该问题进行深入的解释,然后介绍可用于有效解决该问题的数据结构和算法。
第1章简要概述了概率数据结构中广泛使用的散列函数和散列表。第2章专门介绍近似成员查询,这是概率数据结构*著名的用例之一。第3章讨论了用来辅助估算元素基数的概率数据结构。第4章和第5章讨论流式场景下与频数和排序相关的重要指标的计算。第6章包含用于解决相似性问题的数据结构和算法,尤其是近邻搜索问题。


【作者简介】

安德烈·加霍夫
(Andrii Gakhov)
数学家和软件工程师,拥有数学建模和数值方法方向的博士学位。他曾在乌克兰的哈尔科夫国立大学计算机科学学院任教多年,目前是Ferret go GmbH的一名软件从业人员,后者是德国领先的社区审核、自动化和分析公司。他的研究兴趣包括机器学习、流数据挖掘和数据分析。


【目录】

译者序
前言
第1章 散列1
1.1 加密散列函数2
1.2 非加密散列函数5
1.3 散列表7
1.4 总结13
本章参考文献13
第2章 成员查询15
2.1 布隆过滤器16
2.2 计数布隆过滤器24
2.3 商数过滤器27
2.4 布谷过滤器38
2.5 总结46
本章参考文献46
第3章 基数49
3.1 线性计数51
3.2 概率计数55
3.3 LogLog和HyperLogLog63
3.4 总结74
本章参考文献74
第4章 频数77
4.1 多数投票算法80
4.2 频繁算法82
4.3 Count Sketch86
4.4 CountMin Sketch96
4.5 总结105
本章参考文献105
第5章 排序107
5.1 随机采样109
5.2 q-摘要116
5.3 t-摘要125
5.4 总结135
本章参考文献136
第6章 相似性139
6.1 局部敏感散列149
6.2 MinHash153
6.3 SimHash165
6.4 总结174
本章参考文献174


【前言】

大数据特征可从三个基本维度来刻画,体量(volume)、速度(velocity)和多样性(variety),即大数据的三个v。其中,体量表示数据的总量,速度描述数据到达和被处理的速度,多样性指数据类型的个数。
数据无处不在,包括社交媒体、各种传感器、金融交易等。IBM曾声称人们每天创造的数据总量达2.5 EB(2.5 quintillion byte)。这一数字仍然在持续增长,而且大部分数据不能被存储,这些数据经常未经处理就被丢弃。现如今,需要处理TB或PB数量级的语料库以及千兆位速率的数据流的应用场景并不罕见。
另一方面,当下每个公司都想要完全理解所拥有的数据,以便发现其中的价值并做出相应决策。这导致了大数据软件市场的迅猛发展。然而,包含数据结构和算法在内的传统技术在处理大数据时是低效的。因此,许多软件从业人员不断地在计算机科学中寻找合适的解决方案。其中一种可选的解决方案就是使用概率数据结构和算法。
概率数据结构是一类主要基于不同散列技巧的数据结构的统称。不同于常规数据结构(又称确定性数据结构),概率数据结构总是提供近似的答案,但通过可靠的方式估计可能存在的误差。幸运的是,这些潜在的损失和误差可以被极低的内存需求、恒定的查询时间和良好的可扩展性充分弥补。这些因素在大数据应用中是至关重要的。
关于本书
本书面向技术从业人员,包括软件架构师、开发人员以及技术决策者,介绍概率数据结构和算法。通过阅读本书,你将能够对概率数据结构有理论和实践级别的了解,同时了解它们常见的使用场景。
本书不面向科学家,但是要想充分使用本书,你需要具备基本的数学知识,并且需要对数据结构和算法的一般理论有一定的了解。如果你没有任何“计算机科学”的经验,我们强烈推荐你阅读由Thomas H. Cormen,Charles E. Leiserson,Ronald L.Rivest和Clifford Stein(MIT)所撰写的《算法导论》,其中有对计算机算法现代研究的全面介绍。
本书虽然不可能涵盖当前所有的出色解决方案,但将重点介绍它们的共同思想和重要的应用领域,包括成员查询、基数估计、流挖掘和相似性估计。
全书组织结构
本书共6章。每章前面都有引言,后面都有一个简短的总结和参考文献,以供读者进一步阅读与该章有关的内容。每章都专门针对大数据应用中的一个特定问题,首先对该问题进行深入的解释,然后介绍可用于有效解决该问题的数据结构和算法。
第1章简要概述概率数据结构中广泛使用的散列函数和散列表。第2章专门介绍近似成员查询,这是概率数据结构著名的用例之一。第3章讨论用来辅助估算元素基数的概率数据结构。第4章和第5章讨论流式场景下与频数和排序相关的重要指标的计算。第6章包含用于解决相似性问题的数据结构和算法,尤其是近邻搜索问题。
网络上的本书
你可以在https://pdsa.gakhov.com上找到本书的勘误、示例和其他信息。如果你对本书有任何评论与技术问题,想报告发现的错误或任何其他问题,请发送电子邮件至pdsa@gakhov.com。
如果你对本书中很多数据结构和算法的Cython实现感兴趣,请在https://github.com/gakhov/pdsa上查看我们的免费开放源代码Python库PDSA。欢迎大家随时做出贡献。
关于作者
Andrii Gakhov是一名数学家和软件工程师,拥有数学建模和数值方法方向的博士学位。他曾在乌克兰的哈尔科夫国立大学计算机科学学院任教多年,目前是Ferret go GmbH的软件从业人员,后者是德国领先的社区审核、自动化和分析公司。他的研究兴趣包括机器学习、流挖掘和数据分析。
与作者联系的方式是通过推特账户@gakhov或访问他的个人主页https://www.gakhov.com。
致谢
感谢Asmir Mustafic、Jean Vancoppenolle和Eugen Martynov为审阅本书做出的贡献以及他们的有益建议。感谢学术评论家Kateryna Nesvit博士和Dharavath Ramesh博士的宝贵建议和意见。
特别感谢t-摘要算法的作者Ted Dunning。Ted Dunning对相应章节进行了精准的审阅,提出了有见地的问题和许多有益的意见。
后,感谢所有提供反馈并帮助本书成功出版的各位。


返回顶部