4

Url排重Bloom Filter 算法、误差及其他

 3 years ago
source link: https://blog.csdn.net/accesine960/article/details/1491483
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Url排重Bloom Filter 算法、误差及其他

Url排重Bloom Filter 算法、误差及其他
fly with me , in the perfect world --- 题记
最近看了一些书,公式和算法,用一个词把他们窜起来的话,这就是:误差。说起误差,这让我想起了小时候的一个故事。小时候有个朋友他家在二级路旁开了家小商店。有一天客户拿着刚买的散装油对他说:分量不够。他告诉客户:这是误差。客户很生气说分量不够就是不够,怎么是误差?我这个朋友还真有办法,拉客户到隔壁,把油放到地秤上,说:你看把这壶油有放在地秤(称汽车的地称)上,地秤没显示,这就是误差。

小时候的事情,印象很深。

现在想起来,对误差的理解也更多了一些。不同的标准,不同的场合,不同的期望,这些通通构成了误差。可以说我们时时刻刻都被误差包围着。甚至在管理上,方兴东在博客上也总结说:对误差的极度容忍是一个管理者的必备素质。我自己也总结了一下:医学是对模糊的精确控制,管理是对精确的模糊管理。

我这里说说误差和效率的一点关系。误差和效率是一对矛盾共同体,生活中有对误差和效率的关系描述:“萝卜快了,不洗泥”;“慢工出细活”等等,都精辟的说出了误差和效率的辨证关系。对软件工程师来说,特别是编写算法的时候,对于“空间换时间”和“时间换空间”已经耳熟能详了;我想还应该加上一句:误差换效率。

误差换效率

google黑板报上一片文章,讲Url排重用到的一个技巧:把平均长度较长的Url转换成平均长度较短的GUID来节省空间。在Url排重方面还有一个常用的算法:Bloom Filter 算法。Bloom Filter 算法是查看元素E是否在集合S中存在的快速算法,典型的应用就是拼写检查spellcheck时,查看某个单词是否在字典中存在。关于查询的算法有很多种了,排序折半、B-Tree、Hash-Code 等等。Bloom Filter 的优点是什么呢?
1、Bloom Filter不存储key-value值,Bloom Filter 用一组Hash算法把集合S中的元素E换算成位表示;
2、查询速度快。

我们知道Hash算法一般都有冲突,在Bloom Filter中的冲突就表现为误差了。

Bloom Filter 是一种常见的算法,现在已经有了 Java , C++ , C# , ruby 等各个版本的算法。当然也有很多变种出现以适应更多的需求。
Bloom Filter 是有误差的,但误差在可控制的程度内。换句话说,大多数的误差的恼人之处在于我们无法衡量它。

参考阅读:


http://blog.likeshow.net/article.asp?id=34
http://blogs.msdn.com/devdev/archive/2006/01/23/516431.aspx
http://en.wikipedia.org/wiki/Type_I_and_type_II_errors
http://en.wikipedia.org/wiki/Bloom_filter
http://jaspell.sourceforge.net/javadocs/index-files/index-2.html
http://blogs.msdn.com/devdev/archive/2005/08/17/452827.aspx
http://www.cc.gatech.edu/fac/Pete.Manolios/research/bloom-filters-verification.html
http://homepages.inf.ed.ac.uk/s9902505/specksim/doc/index-files/index-2.html
http://weblogs.asp.net/dfindley/archive/2004/08/19/217485.aspx
http://www.darkridge.com/~jpr5/archive/dads/HTML/bloomFilter.html
http://loaf.cantbedone.org/

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK