| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> 布隆过滤器学习梳理 -> 正文阅读 |
|
[Java知识库]布隆过滤器学习梳理 |
感觉要理解布隆过滤器,需要从二叉树说起 平衡二叉树的性质:可以已logn的速度进行搜索,但由于二叉树是要保存key和value,及时使用set,也是需要保存key的,那么如果数据量巨大的时候,比如上亿的数据量,这时候如果在查询的时候,用二叉搜索树,就需要将其都加载到内存中,内存就会爆掉 布隆过滤器就解决了上述问题,可以不用那么多的内存空间,实现数据的查询,但他的查询是有一定局限性的,只能在指定的场景下使用:如果要经常判断 1 个元素是否存在 它是一个空间效率高的概率型数据结构,可以用来告诉你:一个元素一定不存在或者可能存在 优缺点 优点:空间效率和查询时间都远远超过一般的算法 缺点:有一定的误判率、删除困难 它实质上是一个很长的二进制向量和一系列随机映射函数(Hash函数) 常见应用:网页黑名单系统、垃圾邮件过滤系统、爬虫的网址判重系统、解决缓存穿透问题 实现原理:由 m个位二进制、k个哈希函数组成,每个元素经过哈希函数处理都能生成一个索引位置 添加元素:将每一个哈希函数生成的索引位置都设为 1 查询元素是否存在: ????????如果有一个哈希函数生成的索引位置不为 1,就代表不存在(100%准确) ????????如果每一个哈希函数生成的索引位置都为 1,就代表存在(存在一定的误判率) 添加、查询的时间复杂度都是:O(k) ,k 是哈希函数的个数。空间复杂度是:O(m) ,m 是二进制位的个数 布隆过滤器的误判率: 误判率 p 受 3 个因素影响:二进制位的个数 m、哈希函数的个数 k、数据规模 n ? 已知误判率 p、数据规模 n,求二进制位的个数 m、哈希函数的个数 k ?
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 6:04:04- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |