热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

布隆过滤器与哈希表之间的区别

布隆过滤器与哈希表之间的区别原文:https://www.gee

布隆过滤器与哈希表之间的区别

原文: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 浏览器(以检测恶意网址),密码检查器(以防止设置弱密码或可猜测密码或禁止密码列表)中找到应用。

哈希表和布隆过滤器彼此密切相关,因此,比较这两个数据结构并根据您的应用/需求明智地使用它们是明智的。





推荐阅读
author-avatar
刘少静mm_527
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有