作者:刘少静mm_527 | 来源:互联网 | 2023-09-18 09:34
布隆过滤器与哈希表之间的区别
原文:https://www.geeksforgeeks.org/difference-between-bloom-filters-and-hashtable/
哈希表:
哈希表设计为使用一种称为哈希函数的特殊函数,该函数用于使用特定键映射给定值,以更快地访问元素。 它用于需要快速查找的地方。(在合理的假设下,哈希表中元素查找的平均时间为O(1)
)。 Python 中的字典是使用哈希表实现的。 Java 还实现了HashTable
类。
可以在中找到一些哈希应用。
布隆过滤器:
布隆过滤器是一种节省空间的概率数据结构,用于测试元素是否为集合的成员。 它用于只需要知道元素是否属于对象的地方。 布隆过滤器使用k
个哈希函数和n
位数组,其中数组位设置为 0,表示元素不存在,而 1 表示存在该元素。 布隆过滤器的一些应用是:
Google Bigtable,Apache HBase,Apache Cassandra 和 PostgreSQL 使用布隆过滤器来减少对不存在的行或列的磁盘查找。 避免进行昂贵的磁盘查找,可大大提高数据库查询操作的性能。
Google Chrome 浏览器曾经使用布隆过滤器来识别恶意网址。 首先会针对本地布隆过滤器检查所有 URL,只有在布隆过滤器返回肯定结果的情况下,才对执行的 URL 进行全面检查(如果该结果也返回肯定结果,则用户会发出警告)。
让我们看看哈希表和布隆过滤器之间的区别:
序号 |
哈希表 |
布隆过滤器 |
---|
1 |
在哈希表中,对象被存储到哈希函数映射到的存储桶(哈希表中的索引位置)。 |
布隆过滤器不存储关联的对象。 它只是告诉它是否在布隆过滤器中。 |
2 |
哈希表空间效率较低。 |
布隆过滤器更节省空间。 它的大小甚至小于它正在映射的关联对象。 |
3 |
支持删除。 |
无法从布隆过滤器中删除元素。 |
4 |
哈希表给出准确的结果。 |
布隆过滤器的误报率很小。 (误报表示它可能在布隆过滤器中,但实际上不是。) |
5 |
在哈希表中,我们应该实现多个哈希函数,或者具有强大的哈希函数以最大程度地减少冲突。 |
布隆过滤器使用许多哈希函数。 无需处理冲突。 |
6 |
哈希表用于编译器操作,编程语言(基于哈希表的数据结构),密码验证等。 |
布隆过滤器可在网络路由器,Web 浏览器(以检测恶意网址),密码检查器(以防止设置弱密码或可猜测密码或禁止密码列表)中找到应用。 |
哈希表和布隆过滤器彼此密切相关,因此,比较这两个数据结构并根据您的应用/需求明智地使用它们是明智的。