美文网首页漫画算法
漫画算法:布隆算法

漫画算法:布隆算法

作者: 大胡子商人 | 来源:发表于2018-01-03 16:56 被阅读396次
image image image image

两周之前——

image image image

爬虫的原理就不细说了,无非是通过种子URL来顺藤摸瓜,爬取出网站关联的所有的子网页,存入自己的网页库当中。

image

但是,这其中涉及到一个小小的问题......

image image

URL去重方案第一版:HashSet

创建一个HashSet集合,把每一个URL字符串作为HashSet的key插入到集合当中,利用HashSet的Key唯一性来对URL做去重。

image

这个方案看似没毛病,但是经过几轮压测之后......

image

每一个URL按照20字节来算,一亿个URL就是20亿字节,也就是大约占了1.8G以上的空间。这么大的HashSet集合显然是不可取的。

于是小灰又思考了一番......

image

URL去重方案第二版:Bitmap

Bitmap是一种节省空间的数据结构,不太了解的朋友可以看看往期的相关文章:

漫画:什么是Bitmap算法?

具体怎么做呢?获取每一个URL的HashCode,根据HashCode的值来插入到Bitmap的对应位置。如果要插入位置的值已经是1,说明该URL已重复。

image

使用Bitmap以后,每一个Url只占了1个Bit,一亿个Url占约12MB。假设整个Bitmap的空隙比较多,额外空间占90%,总空间也不过是120MB,相比HashSet来说大大节省了内存空间。

这个方案貌似好了很多,可是......

image

String的Hashcode方法虽然尽可能做到均匀分布,但仍然免不了会有冲突的情况。HashCode的冲突意味着什么呢?意味着两个原本并不相同的Url被误判为重复Url。

image

———————————————

image image image image image image image image image image image image

听起来有点绕,我们来详细描述一下:

1.把第一个URL按照三种Hash算法,分别生成三个不同的Hash值。

image

2.把第二个URL也按照三种Hash算法,分别生成三个不同的Hash值。

image

3.依次比较每一个Hash结果,只有当全部结果都相等时,才判定两个URL相同。

image image image

具体怎样映射呢?流程如下:

1.创建一个空的Bitmap集合。

image

2.把第一个URL按照三种Hash算法,分别生成三个不同的Hash值。

image

3.分别判断5,17, 9 在Bitmap的对应位置是否为1,只要不同时为1,就认为该Url没有重复,于是把5,17,9的对应位置设置为1。

image

4.把第二个URL按照三种Hash算法,分别生成三个不同的Hash值。

image

5.分别判断10,12, 9 在Bitmap的对应位置是否为1,只要不同时为1,就认为该Url没有重复,于是把10,12, 9 的对应位置设置为1。

image

6.把第三个URL按照三种Hash算法,分别生成三个不同的Hash值。

image

7.分别判断4,16, 11 在Bitmap的对应位置是否为1,只要不同时为1,就认为该Url没有重复,于是把4,16, 11 的对应位置设置为1。

image

8.把第四个URL按照三种Hash算法,分别生成三个不同的Hash值。

image

9.分别判断5,17, 9 在Bitmap的对应位置是否为1。判断的结果是 5,17, 9 在Bitmap对应位置的值都是1,所以判定该Url是一个重复的Url

image image image

1.URL按照三个Hash算法得到三个结果。

image

2.分别判断10,12, 17 在Bitmap的对应位置是否为1。判断的结果是 10,12, 17 在Bitmap对应位置的值都是1,所以判定该Url是一个重复的Url

image image image image image image image image

From: http://posts.careerengine.us/p/59c1039fc7987e3c8b8214ea

相关文章

  • 漫画算法:布隆算法

    两周之前—— 爬虫的原理就不细说了,无非是通过种子URL来顺藤摸瓜,爬取出网站关联的所有的子网页,存入自己的网页库...

  • 漫画算法

    今天看到了一篇漫画算法,挺有意思的,通俗易懂,就整理了一些,留着慢慢看吧 布隆算法https://mp.weixi...

  • 布隆过滤器(BloomFilter)原理 | 亿级数据过滤解决方

    1970 年,布隆先生提出了一种很优秀的过滤器算法,用来判断一个元素是否在集合中「布隆过滤器算法」故事开始→_→ ...

  • 布隆过滤算法

    前言 在大一刚学习编程的时候,课后习题有这么一道题:现有一个数量为n的有序整数集合,需要判断一个数是否在这个集合中...

  • 理解布隆过滤器算法的实现原理

    布隆过滤器的一些概念 主要包括: 简介 算法 参数 优势和劣势 布隆过滤器简介 布隆过滤器是「一种空间高效概率性的...

  • 布隆过滤器

    什么是布隆过滤器 布隆过滤器(Bloom Filter) 是一种以Bitmap为基础的排重算法。由Bitmap和一...

  • 吴军博士,在《数学之美》

    布隆过滤(Bloom Filter)-必须了解的优化器算法 - wwicked - 博客园http://www.c...

  • JAVA爬取URL,布隆算法去重

    布隆算法: 一种以BitSet(或BitMap)为基础的大数据排重算法,排重的数据类型为字符串。 实现原理(详情请...

  • 布隆过滤器

    什么是布隆过滤器 布隆过滤器是一种算法,其核心思想是通过hash运算,判断当前值的hashCode对应的数组下标是...

  • 布隆过滤器与布谷鸟过滤器

    一、布隆过滤器 1.1 原理 1.1.1 布隆过滤器基础版 原理就是一个对一个key进行k个hash算法获取k个值...

网友评论

    本文标题:漫画算法:布隆算法

    本文链接:https://www.haomeiwen.com/subject/dfxknxtx.html