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/





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值