将数组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,即十六亿字节