Java笔试和面试及知识整理资料
应用介绍
此项目是Java笔试和面试及知识整理资料。
Bloom filter
### 适用范围
实现数据字典,进行数据的判重,或者集合求交集
### 基本原理
对于原理来说很简单,**Bit-Map + K个独立 Hash 函数**。将 Hash 函数对应的值的位数组置`1`,**查找时如果发现所有 Hash 函数对应位都是`1`说明存在**。很明显这个过程并不保证查找的结果是 100% 正确的。同时也不支持删除一个已经插入的关键字,因为该关键字对应的位会牵动到其他的关键字。所以一个简单的改进就是 **Counting Bloom filter**,用一个 Counter 数组代替位数组,就可以支持删除了。
![Bloom_Filter](./assists/Bloom_Filter.png)
对于元素个数:{{<katex>}}n{{</katex>}},错误率(假阳率):{{<katex>}}P{{</katex>}}。我们可以计算:
- Bit-Map 大小:{{<katex>}}m\ge -\frac{n\times ln^P}{(ln^2)^2}{{</katex>}}
- Hash 函数个数:{{<katex>}}k=log_2^\frac{1}{P}{{</katex>}}
> 参数在线计算工具:[Bloom Filter Calculator](https://hur.st/bloomfilter)
举个例子我们假设 {{<katex>}}P=0.01{{</katex>}},{{<katex>}}n=4000{{</katex>}},则此时 m 应大概是 {{<katex>}}9.5\times n=38000{{</katex>}} bit,{{<katex>}}k=7{{</katex>}}
注意这里 m 与 n 的单位不同,m是 `bit` 为单位,而n则是以元素个数为单位(准确的说是不同元素的个数)。通常单个元素的长度都是有很多 `bit` 的。所以使用bloom filter内存上通常都是节省的。
### 扩展
Bloom filter 将集合中的元素映射到位数组中,用 k 个映射位是否全1表示元素在不在这个集合中。`Counting bloom filter(CBF)`将 **位数组中的每一位扩展为一个 Counter**,从而支持了元素的删除操作。`Spectral Bloom Filter(SBF)`将其与集合元素的出现次数关联。**`SBF`采用 Counter 中的最小值来近似表示元素的出现频率**。
### 问题实例
给你A,B两个文件,各存放50亿条URL,每条URL占用64字节,内存限制是4G,让你找出A,B文件共同的URL。如果是三个乃至n个文件呢?
答:根据这个问题我们来计算下内存的占用,`4G=2^32`大概是40亿*8大概是 340亿,n=50亿,如果按出错率 0.01 算需要的大概是 475 亿个bit。现在可用的是 340 亿,相差并不多,这样可能会使出错率上升些。另外如果这些url ip是一一对应的,就可以转换成ip,则大大简单了。
---
## Hashing
### 适用范围
快速查找,删除的基本数据结构,通常需要总数据量可以放入内存
。。。。。 想了解更多请下载附件。
©版权声明:本文内容由互联网用户自发贡献,版权归原创作者所有,本站不拥有所有权,也不承担相关法律责任。如果您发现本站中有涉嫌抄袭的内容,欢迎发送邮件至: www_apollocode_net@163.com 进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
转载请注明出处: apollocode » Java笔试和面试及知识整理资料
文件列表(部分)
名称 | 大小 | 修改日期 |
---|---|---|
.travis.yml | 0.52 KB | 2020-06-21 |
config.yaml | 0.97 KB | 2020-06-21 |
index.md | 1.83 KB | 2020-06-21 |
800px-Patricia_trie.png | 47.78 KB | 2020-06-21 |
874963-20190127184959667-1135956344.png | 82.10 KB | 2020-06-21 |
best_merge_tree_1.png | 13.21 KB | 2020-06-21 |
best_merge_tree_2.png | 19.46 KB | 2020-06-21 |
Bloom_Filter.png | 81.78 KB | 2020-06-21 |
swap_select.png | 38.20 KB | 2020-06-21 |
winner_tree.svg | 1.62 KB | 2020-06-21 |
index.md | 10.91 KB | 2020-06-21 |
hbase_data_model.png | 90.11 KB | 2020-06-21 |
hbase_hadoop_relation.png | 60.04 KB | 2020-06-21 |
hbase_tabel_logic_structure.png | 55.01 KB | 2020-06-21 |
hbase_tabel_physic_structure.png | 69.92 KB | 2020-06-21 |
index.md | 1.84 KB | 2020-06-21 |
hdfs-federation.png | 17.42 KB | 2020-06-21 |
hdfs-ha-qjm.png | 23.73 KB | 2020-06-21 |
hdfs_arthticher.png | 125.85 KB | 2020-06-21 |
hdfs_block_save.png | 52.56 KB | 2020-06-21 |
hdfs_failover.png | 74.42 KB | 2020-06-21 |
hdfs_ha.png | 72.61 KB | 2020-06-21 |
hdfs_read_file_process.png | 27.04 KB | 2020-06-21 |
hdfs_secondary_name_node_sync_editlog.png | 524.24 KB | 2020-06-21 |
hdfs_write_file_process.png | 24.28 KB | 2020-06-21 |
index.md | 7.47 KB | 2020-06-21 |
high-concurrency-system-design.png | 22.00 KB | 2020-06-21 |
index.md | 1.37 KB | 2020-06-21 |
cc2bf6c40bcccedb3e6bb2471ef36e53.png | 63.82 KB | 2020-06-21 |
cee6a24bae2f1146d8f905a9ede12c23.png | 42.17 KB | 2020-06-21 |
发表评论 取消回复