【C++】哈希扩展——位图和布隆过滤器的介绍与实现

【C++】哈希扩展——位图和布隆过滤器的介绍与实现(2026年实用版)

哈希扩展是数据结构中的高频话题,尤其在海量数据场景(如缓存、去重、搜索)。位图(Bitmap)布隆过滤器(Bloom Filter)是哈希思想的最经典应用:它们用极小的空间换取高效的查询/过滤,但会牺牲一点准确性(布隆过滤器有假阳性)。

从1980s的位图思想,到1970年Burton Bloom发明的布隆过滤器,这俩家伙在2026年仍然是Redis、Google BigTable、HBase、Cassandra等大系统中不可或缺的“空间魔法师”。

下面从原理、优缺点、C++实现、应用场景四个维度系统拆解。所有代码基于C++17+,编译器推荐GCC 13+或Clang 16+(现代C++风格,优先用bitset/vector)。

一、位图(Bitmap):用位表示存在的“空间压缩神器”

原理速览
  • 核心思想:用一个位数组(bit array)表示元素是否存在。每个元素通过哈希函数映射到一个位索引,置1表示存在,0表示不存在。
  • 优势:空间效率极高(1亿元素只需12.5MB左右),查询/插入O(1)。
  • 局限:只能表示“是否存在”(不支持计数、删除),且哈希冲突会导致假阳性(但位图通常用完美哈希避免)。
  • 数学基础:假设N个元素,位数组大小M = N / 8(字节),实际用std::vector或bitset优化。
优缺点表格
维度优点缺点适用场景(2026企业真实)
空间极致压缩(1位/元素)固定大小,无法动态扩展(需预估N)海量ID去重、权限位掩码
时间O(1) 查询/插入冲突时需多哈希或链地址(复杂)实时查询(如游戏在线用户)
准确性无假阴性(存在必报),假阳性可控无法删除(需布隆扩展)只需“粗过滤”的场景
C++实现(简单版:支持插入/查询,基于std::vector)
#include<iostream>#include<vector>#include<functional>// for std::hashclassBitmap{private:std::vector<bool>bits_;// 位数组,vector<bool>是空间优化的bit vectorsize_t size_;// 位数组大小(位数)public:// 构造函数:预估最大元素范围(e.g., 1e8 for 100M元素)Bitmap(size_t max_range):size_(max_range),bits_(max_range,false){}// 插入元素(用哈希映射到索引)voidinsert(size_t value){size_t index=std::hash<size_t>{}(value)%size_;bits_[index]=true;}// 查询是否存在boolexists(size_t value)const{size_t index=std::hash<size_t>{}(value)%size_;returnbits_[index];}// 清空(可选)voidclear(){std::fill(bits_.begin(),bits_.end(),false);}};// 示例使用intmain(){Bitmapbm(100000000);// 支持1亿元素,实际内存 ~12.5MBbm.insert(42);bm.insert(2026);std::cout<<"42 exists: "<<bm.exists(42)<<'\n';// 1std::cout<<"999 exists: "<<bm.exists(999)<<'\n';// 0 (假设无冲突)return0;}

注意

  • 哈希冲突:上面用简单mod取余,生产用MurmurHash3或CityHash避免。
  • 优化:用std::bitset<N>如果N是常量(e.g.,bitset<100000000>)。
  • 扩展:多位图(Counting Bitmap)支持计数/删除,但空间翻倍。

二、布隆过滤器(Bloom Filter):位图的“概率升级版”

原理速览
  • 核心思想:位图 + 多哈希函数。每个元素用K个哈希函数映射到位数组的K个位置,全置1。查询时检查K位全为1即“可能存在”;任意0即“不存在”。
  • 数学公式:假阳性率 P ≈ (1 - e{-kn/m})k
    • m:位数组大小
    • n:元素数
    • k:哈希函数数(最佳 k = (m/n) ln2 ≈ 0.7 m/n)
  • 优势:无假阴性(不存在必报),空间比位图更省(可调假阳性率)。
  • 局限:有假阳性(概率可控,通常<1%),不支持删除(需Counting Bloom Filter扩展)。
优缺点表格
维度优点缺点适用场景(2026企业真实)
空间比位图更紧凑(e.g., 1%假阳性下,10位/元素)固定大小,无法精确删除缓存穿透过滤、URL去重、反垃圾邮件
时间O(k) 查询/插入(k通常3~7)哈希计算稍慢(但现代CPU忽略不计)海量数据“先滤后查”
准确性无假阴性,假阳性可调(<0.01%)假阳性随元素增加而升不允许假阴性的场景(如黑名单检查)
C++实现(标准版:支持插入/查询,用多个哈希函数)
#include<iostream>#include<vector>#include<functional>// std::hash#include<bitset>// 位数组(固定大小示例,用vector<bool>也可动态)template<size_t Size>// Size: 位数组大小(e.g., 1e7位 ~1.25MB)classBloomFilter{private:std::bitset<Size>bits_;size_t num_hashes_;// 哈希函数数(k)// 简单多哈希:用std::hash + 种子size_thash(size_t value,size_t seed)const{return(std::hash<size_t>{}(value)^seed)%Size;}public:BloomFilter(size_t k):num_hashes_(k),bits_(){}voidinsert(size_t value){for(size_t i=0;i<num_hashes_;++i){bits_[hash(value,i)]=true;}}boolmight_exist(size_t value)const{for(size_t i=0;i<num_hashes_;++i){if(!bits_[hash(value,i)]){returnfalse;// 肯定不存在}}returntrue;// 可能存在}};// 示例使用(预估n=1e6元素,假阳性<1%,m≈1e7位,k=7)intmain(){BloomFilter<10000000>bf(7);// k=7 最优bf.insert(42);bf.insert(2026);std::cout<<"42 might exist: "<<bf.might_exist(42)<<'\n';// 1std::cout<<"999 might exist: "<<bf.might_exist(999)<<'\n';// 0 或 1(极小概率假阳性)return0;}

注意

  • 哈希函数:上面用简单XOR种子,生产用FNV1a、Murmur3或std::hash_combine多组合。
  • 假阳性计算:用公式预估m和k(在线工具可算:e.g., m = -n ln P / (ln2)^2)。
  • 扩展:Counting Bloom Filter用多位计数支持删除;Scalable Bloom Filter支持动态增长。

三、位图 vs 布隆过滤器:2026年企业选型指南

  • 位图:适合元素范围已知、无需删除的场景(如位掩码权限:1位表示一个权限)。
  • 布隆:适合海量未知元素、“宁可错杀不可放过”的过滤场景(如Redis布隆插件防缓存穿透)。
  • 结合用:布隆先粗滤,位图再精查;或用Guava/RoaringBitmap库(C++用EWAH或Roaring实现)。

四、实战小挑战 & 学习建议

  • 挑战:实现一个支持删除的Counting Bloom Filter(用uint8_t数组,每位4~8计数)。
  • 学习路线:先敲上面代码 → 读Google Guava Bloom源码 → 集成到Redis项目练手。
  • 资源:C++ Primer 第5版(哈希章节) + 《算法导论》布隆部分 + Bilibili“布隆过滤器实现”视频。

你现在想深入位图的压缩变体(Roaring Bitmap),还是布隆的分布式版本(Redis Bloom)?
或者直接说“我要挑战代码”,我给你扩展版~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1174183.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Proxmox VE Helper-Scripts版本更新测试计划:验证矩阵 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

重新定义需求分析:从“写文档”回归“造价值” - 实践

重新定义需求分析:从“写文档”回归“造价值” - 实践2026-01-17 16:48 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; d…

2026年高压/夹布/大口径输水胶管权威推荐榜:河北鼎通橡塑制品有限公司适配矿山、建筑、农业多场景输水解决方案 - 品牌推荐官

河北鼎通橡塑制品有限公司生产的大口径胶管,仅仅是其庞大的产品矩阵中的一个环节。在现代工业输送系统中,无论是矿山排水、建筑供水还是农业灌溉,胶管的质量直接关系到整个系统的安全与效率。01 行业全景:输水胶管…

2026年IP66庭院灯厂家权威推荐榜单:庭院太阳能灯/户外照明庭院灯/农村庭院灯/IP65庭院灯/乡村路灯源头厂家精选 - 品牌推荐官

在户外照明领域,IP66防护等级已成为衡量庭院灯在复杂户外环境中长期可靠性的核心指标。它代表了灯具对灰尘的完全防护以及抵御强力喷水的能力,这对于应对我国多样的气候条件至关重要。随着城乡人居环境提升与智慧城市…

Stirling

讲一些其他地方可能见不到的东西。 这里有一题叫做碎梦。 线性递推做到 \(O(m^3\log n)\) 是平凡的。没写出来的敲一下。 \(k\) 很小。好像可以做点文章。 考虑每两个点值 \(S(x_1,y_1),S(x_2,y_2)\) 之间的贡献。假设…

2026年管道设备推荐:沧州铭信管道有限公司,涂塑/耐磨/衬塑/衬胶/双金属管道全解析 - 品牌推荐官

在管道工程领域,管道材质与工艺的选择直接影响系统的运行效率与使用寿命。沧州铭信管道有限公司凭借多年技术积累,形成了覆盖涂塑管道、耐磨管道、内外衬塑管道、碳钢衬塑管道、衬塑管道、耐磨衬胶管道、衬胶管道、双…

2025年郑州电线电缆回收公司推荐榜:郑州恒森二手空调回收,电缆回收/废旧电缆回收/旧电缆回收/回收电缆/收购电线电缆/回收废旧电缆/回收电线电缆/电缆收购/收购电缆公司精选 - 品牌推荐官

在郑州的城市更新浪潮中,工业区改造与老旧小区升级产生了大量废旧电缆。一家深耕郑州市场8年的本地公司,仅一年就专业处理超过2000吨废旧电缆,服务超3000家客户,成为区域循环经济的关键节点。 随着“无废城市”建设…

2026年吨包袋厂家实力推荐:唐山吴晨嘉科技,防水/耐磨/定制吨包袋全系供应 - 品牌推荐官

在工业包装领域,吨包袋作为大宗货物运输的核心载体,其性能直接关系到物流效率与货物安全。据行业数据显示,2025年国内吨包袋市场规模已突破120亿元,年复合增长率达8.3%,其中防水、耐磨、定制化产品需求占比超过65…

十年深耕,代码为证:深度盘点昊客网络APP/小程序/软件开发的实力服务与成功客户实践 - 深圳昊客网络

深圳市昊客网络科技有限公司(简称:昊客网络)!公司成立于2016年,公司现有团队成员三十余人。团队项目经理、前后端开发团队、设计美工、商务团队经理均在行业内工作15年以上。开发 APP、微信小程序或通用软件涉及不…

2026年不锈钢球/302不锈钢球/轴承钢球厂家推荐:常州市苏南伟杰钢球有限公司全系产品供应 - 品牌推荐官

在工业制造领域,不锈钢球、302不锈钢球、碳钢球及轴承钢球作为关键零部件,广泛应用于轴承、化工、电子、自行车等多个行业。其质量稳定性直接影响设备运行效率与使用寿命。本文聚焦常州市苏南伟杰钢球有限公司(原武…

2026年北京云服务器代理阿里云公司实力推荐榜单:云服务器代理华为云 /云服务器代理天翼云 /云服务器代理火山云 /云服务器代理腾讯云服务商精选 - 品牌推荐官

在北京,企业向云端的迁移正成为驱动数字化转型的核心。作为全球领先的云服务商之一,阿里云提供了广泛的基础设施和平台服务,而专业的本地代理服务公司,则能将标准化的云产品,转化为贴合企业业务实际的解决方案。他…

Windows免费开源神器!这款番茄时钟,治好了我10年拖延症!

下载链接 http://pan.freedw.com/s/hi0XZk 软件介绍 Windows免费开源神器&#xff01;这款番茄时钟&#xff0c;治好了我10年拖延症&#xff01; 软件特点 番茄钟功能 定时任务&#xff0c;定时提醒 免费使用&#xff0c;体积小巧 软件截图

绥化市绥棱青冈庆安英语雅思培训辅导机构推荐,2026权威出国雅思课程中心学校口碑排行榜 - 苏木2025

在雅思培训市场鱼龙混杂的当下,绥化市绥棱、青冈、庆安地区的雅思考生普遍面临着选课迷茫、优质资源匮乏、提分无门的核心痛点。如何筛选出靠谱的教育机构,获取实用的提分技巧、个性化备考方案,实现高分目标顺利通过…

2026年复卷机设备推荐榜:苏州富日智能装备有限公司,双轴/分切/全自动复卷机全系供应 - 品牌推荐官

在工业自动化设备领域,复卷机作为薄膜、纸张、金属箔等材料加工的核心设备,其性能直接影响生产效率与成品质量。苏州富日智能装备有限公司凭借多年技术积累,已发展为集研发、生产、销售、服务为一体的专业智能机械制…

2025年辽宁儿童感统训练方法公司权威推荐榜单:儿童感统训练 /亲子感统训练 /感统训练游戏/ 幼儿感统训练/ 感统训练机构/ 感统训练中心服务精选 - 品牌推荐官

在辽宁,越来越多的家庭开始关注儿童感觉统合(简称感统)能力的发展。感统训练通过专业的游戏与活动设计,旨在帮助儿童改善大脑对身体各器官感觉信息的整合与协调能力,从而提升学习效率、情绪管理和社交互动能力。 …

备份恢复--SMP(软件制作平台)语言基础知识之三十九

备份和恢复是计算机领域中的常用词汇&#xff0c;说明其使用频率不低。备份开始是为了防止程序丢失和变更失败而进行的复制操作&#xff0c;也就是说把现有的程序文件拷贝到一个相对安全的地方。假如程序员写好的程序被误删了&#xff0c;又没有备份&#xff0c;那他只能重新编…

给电脑软件或者网站加密怎么弄?这款隐私保护加密软件来啦~可自定义密码,使用完全免费!

下载链接 http://pan.freedw.com/s/tgHPLb 软件介绍 给电脑软件或者网站加密怎么弄&#xff1f;这款隐私保护加密软件来啦~可自定义密码&#xff0c;使用完全免费&#xff01; 软件特点 自定义密码可对软件和网站加密保护隐私保护神器 软件截图

2026年单锥真空干燥机推荐榜:常州市力群闪蒸干燥设备有限公司,螺带/螺旋/立式/大型/DZLG全系供应 - 品牌推荐官

在干燥设备领域,单锥真空干燥机凭借其高效、节能、环保等特性,成为化工、制药、食品等行业物料干燥的核心设备。据行业数据显示,2025年国内单锥真空干燥机市场规模已突破12亿元,年复合增长率达8.3%,其中螺带单锥真…

电脑端录音软件,使用完全免费,不限制录音时长和次数,可调节音质,增大降低音量,一键录制~自媒体必备神器!

下载链接 夸克网盘&#xff1a;http://pan.freedw.com/s/4nw6Ka 软件介绍 Moo0录音专家是一款小巧免费的电脑录音软件&#xff0c;软件界面简洁&#xff0c;功能项目一目了然&#xff0c;为用户提供了简单的声音录制和设置功能&#xff0c;用户可以自行设置录制电脑全声或人…

世纪联华充值卡回收攻略,三种方法助你变现 - 京回收小程序

世纪联华充值卡回收攻略,三种方法助你变现手里攥着几张世纪联华充值卡却用不上?别让它们在抽屉里“睡大觉”!无论是公司福利、朋友赠送还是活动奖品,闲置的充值卡完全可以通过正规渠道变现。今天分享三种亲测有效的…