[C++]位图+布隆过滤器

一、位图

1、概念

位图,就是用每一位(bit)来存放某种状态,适用于海量数据,数据无重复的场景。通常是用来判断某个数据存不存在的。

如:数据是否在给定的整形数据中,结果是在或者不在,刚好是两种状态,那么可以使用一个二进制比特位来代表数据是否存在的信息,如果二进制比特位为1,代表存在,为0代表不存在。我们将每一个数据都以某种方式映射到位图中,那么一个位置就代表了其所对应的数据,一个数据只映射到其对应的位置中(一一对应)。

应用

  1. 快速查找某个数据是否在一个集合中
  2. 排序
  3. 求两个集合的交集、并集等
  4. 操作系统中磁盘块标记

2、模拟实现

#include<vector>namespace bitset
{template<size_t N>class bitset{public:bitset(){_bs.resize(N);}void set(size_t key){size_t i = key / 32; //找到存储的int块size_t j = key % 32; //找到该块内存储的位置_bs[i] |= (1 << j);}void reset(size_t key){size_t i = key / 32; //找到存储的int块size_t j = key % 32; //找到该块内存储的位置_bs[i] &= ~(1 << j);}bool test(size_t key){size_t i = key / 32; //找到存储的int块size_t j = key % 32; //找到该块内存储的位置return _bs[i] &= (1 << j);}private:vector<int> _bs;};
}

二、布隆过滤器

1、概念

布隆过滤器是由布隆(Burton Howard Bloom)在1970年提出的 一种紧凑型的、比较巧妙的概率型数据结构,特点是高效地插入和查询,可以用来告诉你 “某样东西一定不存在或者可能存在”,它是用多个哈希函数,将一个数据映射到位图结构中。此种方式不仅可以提升查询效率,也可以节省大量的内存空间。

注:布隆过滤器如果说某个元素不存在时,该元素一定不存在,如果该元素存在时,该元素可能存在,因为有些哈希函数存在一定的误判。

2、模拟实现

#include"bitset.h"
#include<string>struct BKDRHash
{size_t operator()(const string& key){// BKDRsize_t hash = 0;for (auto e : key){hash *= 31;hash += e;}return hash;}
};struct APHash
{size_t operator()(const string& key){size_t hash = 0;for (size_t i = 0; i < key.size(); i++){char ch = key[i];if ((i & 1) == 0){hash ^= ((hash << 7) ^ ch ^ (hash >> 3));}else{hash ^= (~((hash << 11) ^ ch ^ (hash >> 5)));}}return hash;}
};struct DJBHash
{size_t operator()(const string& key){size_t hash = 5381;for (auto ch : key){hash += (hash << 5) + ch;}return hash;}
};template<size_t N, class K = string, class HashF1 = BKDRHash, class HashF2 = APHash, class HashF3 = DJBHash>
class BloomFilter
{typedef bitset::bitset<N> bitset;
public:void set(const K& key){size_t hashi1 = HashF1()(key) % N;_bs.set(hashi1);size_t hashi2 = HashF2()(key) % N;_bs.set(hashi2);size_t hashi3 = HashF3()(key) % N;_bs.set(hashi3);}bool test(const K& key){size_t hashi1 = HashF1()(key) % N;if (!_bs.test(hashi1))return false;size_t hashi2 = HashF2()(key) % N;if (!_bs.test(hashi2))return false;size_t hashi3 = HashF3()(key) % N;if (!_bs.test(hashi3))return false;return true;}private:bitset _bs;
};

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

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

相关文章

Win10工具:批量word转png图片

首先声明这个小工具是小编本人开发的&#xff0c;无任何广告&#xff0c;会员收费机制等&#xff0c;永久使用。允许公司或个人使用&#xff0c;不允许倒卖&#xff0c;否则发现后会追究法律责任&#xff0c;毕竟开发不易。工具是用python开发的。 功能非常单一&#xff0c;就…

做过的试卷怎样才能去掉答案打印

对于做过的试卷&#xff0c;如想将其打印比较难以解决的困难就是“去除打印”。当然&#xff0c;目前应用上市场上也会有很多能够去除打印的应用软件&#xff0c;如“试卷擦除宝”这是一款专业的试卷擦除软件&#xff0c;能够擦除试卷上的手写笔迹&#xff0c;并将试卷转化为电…

python实现openssl的EVP_BytesToKey及AES_256_CBC加解密算法

python实现openssl EVP_BytesToKey(EVP_aes_256_cbc(), EVP_md5(), NULL, pass, passlen, 1, key, iv); 并实现AES 256 CBC加解密. # encoding:utf-8import base64 from Crypto.Cipher import AES from Crypto import Random from hashlib import md5def EVP_BytesToKey(passw…

python:绘制一元三次函数的曲线

编写 test_x3_3x.py 如下 # -*- coding: utf-8 -*- """ 绘制函数 y x^33x4 在 -3<x<3 的曲线 """ import numpy as np from matplotlib import pyplot as plt# 用于正常显示中文标题&#xff0c;负号 plt.rcParams[font.sans-serif] […

Games101——光珊化——深度缓存——shading着色 1

深度缓存 如何解决远近的问题&#xff0c;能正确的覆盖 按照画作来说&#xff0c;先画出远处的物体&#xff0c;再画出近处的物体&#xff0c;近处会将其覆盖&#xff0c;这种算法叫做画家算法 但事实上&#xff0c;排序不仅要花更多的时间&#xff0c;而且排序并不容易&…

RIP路由协议概述

RIP【Routing Information Protocol】 RIP是为TCP/IP 环境中开发的第一个路由选择协议标准 RIP是一个【距离——矢量】路由选择协议 当路由器的更新周期为30s到来时&#xff0c;向邻居发送路由表 RIP以跳数作为唯一度量值 RIP工作原理 RIP路由协议向邻居发送整个路由表信息RI…

农场资源的获取

一、网站 资源 二、搜索土壤资源 1、找到类别&#xff0c;点击Browse Texture 2、搜索、选择 3、搜索Brown Mud Dry 4、搜索Brown Mud 三、

深入探索Laravel框架中的Blade模板引擎

Laravel是PHP界广受欢迎的一个现代Web应用框架&#xff0c;以其优雅、简洁的代码风格和强大的功能而闻名。在Laravel中&#xff0c;模板引擎是一个不可或缺的组件&#xff0c;它负责将数据和视图模板结合起来&#xff0c;生成最终的HTML内容。Laravel默认使用的模板引擎是Blade…

[web]-图片上传、文件包含-图片上传

题目内容提示&#xff1a;上传图片试试吧&#xff0c;注意统一时区问题 打开页面如图&#xff0c;源码没有过滤&#xff0c;随便输入&#xff0c;进入上传目录 根据链接可以看到是文件包含&#xff0c;可以利用编码读取源码&#xff0c;这里只列出有用页面的编码&#xff08;?…

CSS盒模型的定义以及标准盒模型与IE盒模型的区别

CSS盒模型解释 CSS盒模型是CSS中一个非常重要的概念&#xff0c;它定义了一个HTML元素在页面中所占据的空间。盒模型决定了元素的尺寸、边距和边框的大小&#xff0c;以及元素的内部内容的布局。它由四个部分组成&#xff1a;内容区域&#xff08;content&#xff09;、内边距…

【Hive SQL 每日一题】在线峰值人数计算

文章目录 测试数据需求说明需求实现 测试数据 -- 创建 user_activity 表 DROP TABLE IF EXISTS user_activity ; CREATE TABLE user_activity (user_id STRING,activity_start TIMESTAMP,activity_end TIMESTAMP );-- 插入数据 INSERT INTO user_activity VALUES (user1, 2024…

大模型-Bert+PET实战

PET&#xff08;Pattern-Exploiting Training&#xff09; 背景&#xff1a;预训练语言模型&#xff08;比如BERT&#xff09;知识全面&#xff0c;但是没有针对下游任务做针对训练&#xff0c;所以效果一般&#xff0c;所以需要根据任务做微调。 核心思想&#xff1a;根据先…

【问题解决】Could not find a package configuration file provided by “autoware_msgs“

问题描述 通过catkin_make命令编译时&#xff0c;产生问题如下&#xff1a; Base path: /home/defu/PncProject/frenet_planner_ws Source space: /home/defu/PncProject/frenet_planner_ws/src Build space: /home/defu/PncProject/frenet_planner_ws/build Devel space: /…

银河麒麟高级服务器操作系统 V10 SP3 2403

系统简介 银河麒麟高级服务器操作系统V10是一款为企业级关键业务设计的新一代自主服务器操作系统&#xff0c;它满足虚拟化、云计算、大数据等时代需求&#xff0c;具备高可靠性、安全性、性能和扩展性。该系统基于CMMI5级标准开发&#xff0c;支持多种国产处理器平台&#xf…

PTA 7-15 希尔排序

本题目要求读入N个整数&#xff0c;采用希尔排序法进行排序&#xff0c;采用增量序列{5&#xff0c;3&#xff0c;1}&#xff0c;输出完成增量5和增量3后的5子排序和3子排序结果。 输入格式: 输入不超过100的正整数N和N个整数&#xff08;空格分隔&#xff09;。 输出格式: …

UDP网络通信(发送端+接收端)实例 —— Python

简介 在网络通信编程中&#xff0c;用的最多的就是UDP和TCP通信了&#xff0c;原理这里就不分析了&#xff0c;网上介绍也很多&#xff0c;这里简单列举一下各自的优缺点和使用场景 通信方式优点缺点适用场景UDP及时性好&#xff0c;快速视网络情况&#xff0c;存在丢包 与嵌入…

重学PyTorch,粗略笔记(一)

很久之前学PyTorch记的笔记&#xff0c;顺手整理一下 安装 Start Locally | PyTorch pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118tensors张量 标量是零维张量&#xff0c;向量是一维张量&#xff0c;矩阵是二维张量&am…

【密码学】分组密码的设计原则

分组密码设计的目标是在密钥控制下&#xff0c;从一个巨大的置换集合中高效地选取一个置换&#xff0c;用于加密给定的明文块。 一、混淆原则 混淆原则是密码学中一个至关重要的概念&#xff0c;由克劳德香农提出。混淆原则就是将密文、明文、密钥三者之间的统计关系和代数关系…

后端实现图片上传本地,可采用url查看图片

前言 本文将实现在数据库中存储图片url&#xff0c;url可以在浏览器中访问查看。 整体思路为&#xff1a; 上传图片到本地指定地址为图片分配url保存至数据库根据分配url&#xff0c;进行物理地址映射到本地指定地址 具体实现 controller层&#xff1a; 上传图片到本地指定…

【JavaEE】网络编程——TCP

&#x1f921;&#x1f921;&#x1f921;个人主页&#x1f921;&#x1f921;&#x1f921; &#x1f921;&#x1f921;&#x1f921;JavaEE专栏&#x1f921;&#x1f921;&#x1f921; 文章目录 前言1.网络编程套接字1.1流式套接字(TCP)1.1.1特点1.1.2编码1.1.2.1ServerSo…