Bloom Filter 的数学原理和在区块链里的应用

布隆过滤器(Bloom Filter),可以不用知道一个块里的所有交易数据,而只用下载很少的数据,就能知道一个交易是否在一个块里(如果在块里,那么一定告诉你在块里,如果不在块里,有很小概率告诉你在块里). 算法的设计的还是很妙的,值得去学习一下这种概率型算法思维。

原理:

Step1 :

假设一个块有n个交易,那么做一个m=2*n长度的bit array,这里称为A

用一个hash函数把交易映射到A的响应位置x=hash[transaction], 并设置A[x]=1。并不处理冲突的情况。

那么查交易的时候,如果交易在块里的话A[hash[transation]]一定为1,

如果不在块里的话,A[hash[transaction]]为1的概率<=1/2 (因为A的长度m=2*n)。

现在这个算法的问题是1/2的误报概率太大了。

Step2: 

做多个bit array, A1, A2 ... Ak. 

先看两个bit array的情况: 用个两个不同的hash函数来填充A1,A2.

对一笔不在块里的交易,A1,A2相对应位置都为1的概率是1/2*1/2= 1/4,优化了很多

假设用10个bit array, 那么误报的概率为(1/2)^10 = 1/1024,是一个非常小的数字。

也就是说为了达到p的误报率,就用log2(1/p)个bit array就可以了

通过记录这些很少的hash数据,比特币的轻钱包可以快速定位交易在哪个块里。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1 货币的演变——从贝壳到比特币 当社会分工产生之后,人类就产生了商品交换的需求。在货币被发明之前,人类是以以物换...
    longlee阅读 7,667评论 1 23
  • 价格肯定取决于供求关系,当你的用自己的时间为别人提供了有用的价值,并且你提供的答案独一无二的话那你的时间就会值钱...
    falseplanet阅读 159评论 0 1
  • 曾经在网上看到说,人的意志是有限的,所以在一个时间段,只能干一件事情,比方说,减肥和考研,这两者就不要在同个时间进...
    舟⼀阅读 768评论 0 0
  • 就像听马頔Intor口白版是会让人听到流泪的就像天冷我想为你亲自带围脖是奢望的就像每次玫瑰花酥饼想跟你分享都是想想...
    橙兮阅读 325评论 0 1
  • 公主从小深闺宫殿,偶得一次出城,路遇一老式溜冰场,场内偌大的音响播放着叛逆的音乐,充斥着自由的气息,于是公主走进去...
    超人姐姐阅读 276评论 0 0