从两个数组中查找相同的数字谈Hashtable 时间复杂度O(n) 引申 布隆过滤器

本文介绍了如何利用Hashtable以O(n)的时间复杂度从两个数组中查找相同的数字,通过将数组A中的数字作为下标创建哈希表来快速判断元素是否存在。此外,文章还探讨了布隆过滤器的概念,它是如何通过减少存储空间来解决大规模集合成员资格查询问题的,并解释了其工作原理和误识概率。
摘要由CSDN通过智能技术生成

将数组A中的数字作为下标作为KEY,VALUE为1,没有的数字VALUE为0

这样从数组B中通过数组元素就可以迅速在A中找到,如果VALUE是1表示在A中存在,如果VALUE是0表示在A中不存在


http://www.cnblogs.com/lwzz/archive/2012/02/15/2350903.html



在日常生活中,包括在设计计算机软件时,经常要判断一个元素是否在一个集合中。
比如在字处理软件中,需要检查一个英语单词是否拼写正确(也就是要判断它是否在已知的
字典中);在 FBI 中,一个嫌疑人的名字是否已经在嫌疑名单上;在网络爬虫里,一个网址
是否被访问过等。最直接的方法就是将集合中全部的元素存在计算机中,遇到一个新元素
时,
将它和集合中的元素直接比较即可。
一般来讲,
计算机中的集合是用哈希表(Hash Table)
来存储的。它的好处是快速而准确,缺点是费存储空间。当集合比较小时,这个问题不显
著,但是当集合巨大时,哈希表存储效率低的问题就显现出来了。比如说,一个像 Yahoo、
Hotmail 和 Gmail 那样的公众电子邮件(E-mail)提供商,
总是需要过滤来自发送垃圾邮件的人
(spamer)的垃圾邮件。一个办法就是记录下那些发垃圾邮件的 E-mail 地址。由于那些发送

者不停地在注册新的地址,全世界少说也有几十亿个发垃圾邮件的地址,将它们都存起来
则需要大量的网络服务器。如果用哈希表,每存储一亿个 E-mail 地址,就需要 1.6GB 的
内存(用哈希表实现的具体办法是将每一个 E-mail 地址对应成一个八字节的信息指纹, 然
后将这个信息指纹存入哈希表,
由于哈希表的存储效率一般只有 50%,
因此一个 E-mail 地
址需要占用十六个字节。一亿个地址大约要 1.6GB,即十六亿字节

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值