二. 大数据常用的算法和数据结构 <<大数据日知录>> 读书笔记
基本上是hash实用的各种举例
- 布隆过滤器 Bloom Filter
常用来检测某个原色是否是巨量数据集合中的成员,优势是节省空间,不会有漏判(已经存在的数据肯定能够查找到),缺点是有误判(不存在的数据可能也会被找到)。
应用场景有,chrome进行恶意的url判断,爬虫判断爬取过的url,缓存使用BF进行海量数据查找,比特币使用BF对历史交易进行验证。
基本思想是,首先有个位数组,长度为m,将数据a通过n个hash函数进行计算,每个hash得到的结果x 在[1,m]区间,将x作为一个索引,索引到位数组的x位置并置1,这样数据a就会将位数组中的n个位置置1,对a的存在与否的查询,就通过判断a hash后所有位置的1是否存在,来进行判断
因为只需要位数组来进行数据的映射存储,所以BF的空间利用率是很高的,但是很明显,这种方法会有误判率,如果a和b进行hash后设置的bit 1正好覆盖了数据c的hash后的bit 1的位置,则会误判c也存在。所以基本的BF算法是不适合对误判率要求较高的情况,另外一个优点是BF不会有漏判......
那么影响误判率的因素有哪些呢?数据集合越大,自然设置的bit 1 会越多,误判率会越高;位数组的长度越大,bit 1 重复的可能越小,误判率越低;hash函数个数对误判率的影响,分两头说,映射的写bit过程,hash函数越多,越多的bit会被置1,导致误判率越高,查询时,哈希函数越多,误判率越低。书中提供了一个经过数学分析的公式,我们要做的,就是灵活的使用公式,根据实际情况来决定,在误判率和数据预估的情况下,如何设计hash函数和位数组。
计数BF:
基本的BF是无法删除映射关系的,因为一旦删除某数据对应的所有bit 1,可能影响到其他映射到同样bit的数据。解决方案是bit不仅置1,还进行一个置1的计数。
2. skip list
一般而言,列表的查找是耗时的,因为要一个接一个的查找,而skip list可以解决这个问题,redis就用到了skip list提高了查找效率
总体而言,skip list是将list进行了分层,数据可能同时在多层的列表中,而数据的查找,可以在各层之间进行,这样就是跳跃着查找,而不是挨个的查找。
数据的插入,在找到位置后,会通过随机数进行新节点的层数生成,然后加入整体的skip list,更新每一层的指针。
3. Merkle 哈希树
Merkle树主要用来在海量数据下定位少量变化的数据内容。
树如下,root的hash值会由CDEF四个数据块的hash值得到,所以有一个数据有变化,导致根节点的hash变化,然后就向子节点查询,最终快速找到是C D E F 哪个子节点变化了。
4 snappy与LZSS算法
这里说的是压缩和解压算法。
词典编码,即用一个词典中的号码来代替文本中的词,实现压缩。而这个词典可以预设,即静态词典,或者动态生成,LZSS就是动态词典编码。
比如abcdxabcm,动态词典由已经编码的文本导出生成,当编码abcdx后,到abcm,发现abc在动态词典中存在,于是这个abc就可以压缩输出,达到压缩目的。可见,如果要提高压缩效率,可以对查询字典额字符做合理的最小匹配长度限制,如果上面例子的最小匹配长度为4,那么上面提到的abc就不会压缩了。
同时,如何找到最长匹配的字符串也是影响效率的关键点之一,我们可以将各种长度片段存入hash表,就可以实现最快的匹配。
snappy基本上遵循lz算法,它规定最小匹配长度为4,同时将整个数据分割32kb,独立压缩,这样2个字节可以匹配字符串的相对位置
5 cuckoo hashing
这种hash可以很好的解决hash冲突,提高了hash的查找效率
插入一个数据x,将其进行2个不同的hash,得到2个hash桶的索引,如果有任意一个为空,则插入,如果都不为空,则踢出当前数据,然后插入x,被踢出的数据重复上述操作,如果一直有被踢出的数据,则设定最大替换次数,当到达最大,要么增加桶,要么重新选择合适的hash函数来替换之前的函数。
这种方式下,查找变成O(1)的复杂度,因为只要查2个位置即可。
这种hash的一般变体,是增加hash函数的个数或者让每个桶存储多个数据,可以提高hash空间的桶里用来过滤
二. 大数据常用的算法和数据结构 <<大数据日知录>> 读书笔记的更多相关文章
- 一. 数据分片和路由 <<大数据日知录>> 读书笔记
本章主要讲解大数据下如何做数据分片,所谓分片,即将大量数据分散在不同的节点,同时每个存储节点还要做副本备份. 而一般的抽象分片方法是, 先将数据映射到一个分片空间,这是多对一的关系,即一个数据分片区间 ...
- 《大数据日知录》读书笔记-ch3大数据常用的算法与数据结构
布隆过滤器(bloom filter,BF): 二进制向量数据结构,时空效率很好,尤其是空间效率极高.作用:检测某个元素在某个巨量集合中存在. 构造: 查询: 不会发生漏判(false negativ ...
- 读<大数据日知录:架构与算法>有感
前一段时间, 一个老师建议我能够学学 '大数据' 和 '机器学习', 他说这必定是今后的热点, 学会了, 你就是香饽饽.在此之前, 我对大数据, 机器学习并没有非常深的认识, 总觉得它们是那么的缥缈, ...
- 【转】Verilog HDL常用建模方式——《Verilog与数字ASIC设计基础》读书笔记(四)
Verilog HDL常用建模方式——<Verilog与数字ASIC设计基础>读书笔记(四) Verilog HDL的基本功能之一是描述可综合的硬件逻辑电路.所谓综合(Synthesis) ...
- 《神经网络算法与实现-基于Java语言》的读书笔记
文章提纲 全书总评 读书笔记 C1.初识神经网络 C2.神经网络是如何学习的 C3.有监督学习(运用感知机) C4.无监督学习(自组织映射) Rreferences(参考文献) 全书总评 书本印刷质量 ...
- 存储器的保护(二)——《x86汇编语言:从实模式到保护模式》读书笔记19
接着上一篇博文说. 5.代码段执行时的保护 每个代码段都有自己的段界限.同栈段一个道理,有效界限和G位相关. G=0:有效界限 = 描述符中的段界限 G=1:有效界限 = 描述符中的段界限值 * 0x ...
- 硬盘和显卡的访问与控制(二)——《x86汇编语言:从实模式到保护模式》读书笔记02
上一篇博文我们讲了如何看到实验结果,这篇博文我们着重分析源代码. 书中作者为了说明原理,约定了一种比较简单地用户程序头部格式,示意图如下(我参考原书图8-15绘制的,左边的数字表示偏移地址): 所以, ...
- 进入保护模式(二)——《x86汇编语言:从实模式到保护模式》读书笔记14
首先来段题外话:之前我发现我贴出的代码都没有行号,给讲解带来不便.所以从现在起,我要给代码加上行号.我写博客用的这个插入代码的插件,确实不支持自动插入行号.我真的没有找到什么好方法,无奈之下,只能按照 ...
- 《大数据日知录》读书笔记-ch16机器学习:分布式算法
计算广告:逻辑回归 千次展示收益eCPM(Effective Cost Per Mille) eCPM= CTR * BidPrice 优化算法 训练数据使用:在线学习(online learning ...
随机推荐
- 关于yarn安装,这里做一个备份
安装的是window版本,官网上有三种安装方式. 第一种下载一个.msi的安装包,然后当它运行时会指引你将 Yarn 安装到 Windows 上,因为点开以后页面是404,所以没有用这种方法. 第二种 ...
- Pandas的介绍与基本使用
1.什么是Pandas 当大家谈论到数据分析时,提及最多的语言就是Python和SQL,而Python之所以适合做数据分析,就是因为他有很多强大的第三方库来协助,pandas就是其中之一,它是基于Nu ...
- flask部署深度学习模型
flask部署深度学习模型 作为著名Python web框架之一的Flask,具有简单轻量.灵活.扩展丰富且上手难度低的特点,因此成为了机器学习和深度学习模型上线跑定时任务,提供API的首选框架. 众 ...
- Eclipse常用快捷键【转】
Eclipse的编辑功能非常强大,掌握了Eclipse快捷键功能,能够大大提高开发效率.Eclipse中有如下一些和编辑相关的快捷键.1. [ALT+/]此快捷键为用户编辑的好帮手,能为用户提供内容的 ...
- 类选择器练习:Google 案例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...
- Postman 的替代品来了
Postwoman 一个开源.免费.快速.漂亮的 API 构建器,可以替代 Postman. 这个名字起得挺有意思,感觉像 Postman 的媳妇. Postwoman 的诞生过程: 它的作者是一个全 ...
- 国产CPU 申威1621 异数OS基础组件理论性能测试报告
国产CPU 申威1621 异数OS基础组件理论性能测试报告 文章目录 国产CPU 申威1621 异数OS基础组件理论性能测试报告 前言 测试平台 测试项目 SW1621 异数OS 容器虚拟交换机模拟性 ...
- B-Tree 和 B+Tree 结构及应用,InnoDB 引擎, MyISAM 引擎
1.什么是B-Tree 和 B+Tree,他们是做什么用的? B-Tree是为了磁盘或其它存储设备而设计的一种多叉平衡查找树,B-Tree 和 B+Tree 广泛应用于文件存储系统以及数据库系统中. ...
- UidGenerator springboot2集成篇
uid-generator 官网集成文档: https://github.com/baidu/uid-generator/blob/master/README.zh_cn.md 由于并没有提供spri ...
- LeetCode 858 镜面反射
题目 有一个特殊的正方形房间,每面墙上都有一面镜子.除西南角以外,每个角落都放有一个接受器,编号为 0, 1,以及 2. 正方形房间的墙壁长度为 p,一束激光从西南角射出,首先会与东墙相遇,入射点到接 ...