当前位置: 首页 > news >正文

惠州网站开发建筑网络计划图

惠州网站开发,建筑网络计划图,网站备案号如何查询密码,装修案例✅1主页#xff1a;#xff1a;我的代码爱吃辣 #x1f4c3;2知识讲解#xff1a;数据结构——位图 ☂️3开发环境#xff1a;Visual Studio 2022 #x1f4ac;4前言#xff1a;布隆过滤器是由布隆#xff08;Burton Howard Bloom1主页我的代码爱吃辣 2知识讲解数据结构——位图 ☂️3开发环境Visual Studio 2022 4前言布隆过滤器是由布隆Burton Howard Bloom在1970年提出的 一种紧凑型的、比较巧妙的概率型数据结构特点是高效地插入和查询可以用来告诉你 “某样东西一定不存在或者可能存在”它是用多个哈希函数将一个数据映射到位图结构中。此种方式不仅可以提升查询效率也可以节省大量的内存空间。 目录 一.布隆过滤器提出 二.布隆过滤器概念  三.布隆过滤器实现 1.布隆过滤器的结构 2.布隆过滤器插入 3.布隆过滤器的查询 4.布隆过滤器的删除 四.布隆过滤器优点 五.布隆过滤器缺陷 六.海量数据处理 ​ 一.布隆过滤器提出 我们在使用新闻客户端看新闻时它会给我们不停地推荐新的内容它每次推荐时要去重去掉 那些已经看过的内容。问题来了新闻客户端推荐系统如何实现推送去重的 用服务器记录了用 户看过的所有历史记录当推荐系统推荐新闻时会从每个用户的历史记录里进行筛选过滤掉那 些已经存在的记录。 如何快速查找呢 用哈希表存储用户记录缺点浪费空间用位图存储用户记录缺点位图一般只能处理整形如果内容编号是字符串就无法处理了。将哈希与位图结合即布隆过滤器。 二.布隆过滤器概念  布隆过滤器是由布隆Burton Howard Bloom在1970年提出的 一种紧凑型的、比较巧妙的概 率型数据结构特点是高效地插入和查询可以用来告诉你 “某样东西一定不存在或者可能存 在”它是用多个哈希函数将一个数据映射到位图结构中。此种方式不仅可以提升查询效率也 可以节省大量的内存空间。 ​ 三.布隆过滤器实现 1.布隆过滤器的结构 templatesize_t N,class Kstring,class Hash1 HashChange1,class Hash2HashChange2 ,class Hash3HashChange3 class Bloom {Hash1 hash1;Hash2 hash2;Hash3 hash3; public:void set(const K key){}bool test(const K key){}private:static const size_t _X 5;//存储数据个数和hash函数个数的一种关系使得冲突率降到最低BitSetN*_X _bit; //位图共开N*_x个位 }; 注意  static const size_t _X 5;//存储数据个数和hash函数个数的一种关系使得冲突率降到最低   BitSetN*_X _bit;         //位图共开N*_x个位 具体介绍见详解布隆过滤器的原理使用场景和注意事项 - 知乎。 2.布隆过滤器插入 向布隆过滤器插入“百度”“Tencent” ​ struct HashChange1 {size_t operator()(const string str){size_t hash 0;for (auto ch : str){hash ch;hash * 31;}return hash;} };struct HashChange2 {size_t operator()(const string str){size_t hash 0;for (long i 0; i str.size(); i){size_t ch str[i];if ((i 1) 0){hash ^ ((hash 7) ^ ch ^ (hash 3));}else{hash ^ (~((hash 11) ^ ch ^ (hash 5)));}}return hash;} };struct HashChange3 {size_t operator()(const string str){size_t hash 5381;for (auto ch : str){hash (hash 5) ch;}return hash;} };templatesize_t N,class Kstring,class Hash1 HashChange1,class Hash2HashChange2 ,class Hash3HashChange3 class Bloom {Hash1 hash1;Hash2 hash2;Hash3 hash3; public:void set(const K key){//分别使用三个hash函数分别插入三个位置_bit.set(hash1(key) % (_X * N));_bit.set(hash2(key) % (_X * N));_bit.set(hash3(key) % (_X * N));}bool test(const K key){}private:static const size_t _X 5;BitSetN*_X _bit; }; 3.布隆过滤器的查询 布隆过滤器的思想是将一个元素用多个哈希函数映射到一个位图中因此被映射到的位置的比特 位一定为1。所以可以按照以下方式进行查找分别计算每个哈希值对应的比特位置存储的是否为 零只要有一个为零代表该元素一定不在哈希表中否则可能在哈希表中。 注意布隆过滤器如果说某个元素不存在时该元素一定不存在如果该元素存在时该元素可 能存在因为有些哈希函数存在一定的误判。 例如 ​ 如果此时我们查询“bilibili”即使我们没有插入bilibili也会得到一个存在的反馈所以说存在的反馈是不准确的但是如果我们得到的反馈是不存在那就一定不存在。 bool test(const K key){//当有一个位置不存在时就是准确的不存在if (!_bit.test(hash1(key) % (_X * N))){return false;}if (!_bit.test(hash2(key) % (_X * N))){return false;}if (!_bit.test(hash3(key) % (_X * N))){return false;}return true;//不准确存在误判} 4.布隆过滤器的删除 布隆过滤器不能直接支持删除工作因为在删除一个元素时可能会影响其他元素。 比如删除上图中tencent元素如果直接将该元素所对应的二进制比特位置0“baidu”元素也 被删除了因为这两个元素在多个哈希函数计算出的比特位上刚好有重叠。 一种支持删除的方法将布隆过滤器中的每个比特位扩展成一个小的计数器插入元素时给k个计 数器(k个哈希函数计算出的哈希地址)加一删除元素时给k个计数器减一通过多占用几倍存储 空间的代价来增加删除操作。 四.布隆过滤器优点 增加和查询元素的时间复杂度为:O(K), (K为哈希函数的个数一般比较小)与数据量大小无关。哈希函数相互之间没有关系方便硬件并行运算。布隆过滤器不需要存储元素本身在某些对保密要求比较严格的场合有很大优势。在能够承受一定的误判时布隆过滤器比其他数据结构有这很大的空间优势。数据量很大时布隆过滤器可以表示全集其他数据结构不能。使用同一组散列函数的布隆过滤器可以进行交、并、差运算。 五.布隆过滤器缺陷 有误判率即存在假阳性(False Position)即不能准确判断元素是否在集合中(补救方法再建立一个白名单存储可能会误判的数据)。不能获取元素本身。一般情况下不能从布隆过滤器中删除元素。 六.布隆过滤器实现源码 BitSet.hpp #includevector #includeiostream #includestring using namespace std;templatesize_t N class BitSet { public:BitSet(){_map.resize((N / 8) 1, 0);}void set(const int num){size_t i num / 8;size_t j num % 8;_map[i] | 1 j;}void reset(const int num){size_t i num / 8;size_t j num % 8;_map[i] ~(1 j);}bool test(const int num){size_t i num / 8;size_t j num % 8;return _map[i] (1 j) ;}private:vectorchar _map; };Bloom.hpp #pragma once #includeBitMap.hppstruct HashChange1 {size_t operator()(const string str){size_t hash 0;for (auto ch : str){hash ch;hash * 31;}return hash;} };struct HashChange2 {size_t operator()(const string str){size_t hash 0;for (long i 0; i str.size(); i){size_t ch str[i];if ((i 1) 0){hash ^ ((hash 7) ^ ch ^ (hash 3));}else{hash ^ (~((hash 11) ^ ch ^ (hash 5)));}}return hash;} };struct HashChange3 {size_t operator()(const string str){size_t hash 5381;for (auto ch : str){hash (hash 5) ch;}return hash;} };templatesize_t N,class Kstring,class Hash1 HashChange1,class Hash2HashChange2 ,class Hash3HashChange3 class Bloom {Hash1 hash1;Hash2 hash2;Hash3 hash3; public:void set(const K key){_bit.set(hash1(key) % (_X * N));_bit.set(hash2(key) % (_X * N));_bit.set(hash3(key) % (_X * N));}bool test(const K key){//当有一个位置不存在时就是准确的不存在if (!_bit.test(hash1(key) % (_X * N))){return false;}if (!_bit.test(hash2(key) % (_X * N))){return false;}if (!_bit.test(hash3(key) % (_X * N))){return false;}return true;//不准确存在误判}private:static const size_t _X 5;BitSetN*_X _bit; }; 七.海量数据处理 1. 给定100亿个整数设计算法找到只出现一次的整数 答我们要标识一个整数的状态此时应该由三种 一次也没有出现只出现一次出现次数在一次以上 我们使用两张位图即可每个数值就会由两个比特位进行标识两个比特位就可以标识这三种状态 一次也没有出现00只出现一次01出现次数在一次以上10 2.给两个文件分别有100亿个整数我们只有1G内存如何找到两个文件交集 方法一我们将第一个文件插入位图用第二个文件对第一个文件的位图进行查询查询到了就是交集数据。如果文件中都有重复数据就会对重复文件反复找到交集我们可以每次找到交集以后将上面一个位图交集位置置0就不会下一次再重复找到交集了。 方法二将两个文件的数据全部加载带位图在对两个位图按位与交集位置都是1按位与之后得到的就是交集。 3.位图应用变形1个文件有100亿个int1G内存设计算法找到出现次数不超过2次的所有整数 这个问题与第一个问题相似想找到出现次数不超过两次的数据我们就看需要几个状态进行标识进而选择使用几张位图即可。不超过2次即需要4中状态标识 一次也没有出现:00出现一次01出现两次10出现两次以上11 问题迎刃而解。 4.给两个文件分别有100亿个query我们只有1G内存如何找到两个文件交集 首先我们使用hash切割针对AB文件分别创建1000个小文件Ai,Bi1i1000。对文件A和文件B的每个query进行hash分割分割就是对每一个query执行哈希函数得到一个hash位置 i 控制在1000以内然后进入Ai和Bi文件中。A和B相同的query因为使用同一个hash函数就会得到同一个hash位置i继而进入编号一样的小文件。 ​ ​ 如果我们在hash分割小文间的时候出现某一个小文件过大 ​
http://www.tj-hxxt.cn/news/221371.html

相关文章:

  • 百度上面如何做网站wap商城网站模板素材
  • 广州黄埔网站建设资阳建网站
  • 宝安做棋牌网站建设哪家便宜自己建设公司网站
  • 旅游网站建设服务自己学网站建设
  • 怎么给客户谈做网站如何做一个wordpress
  • 培训学校网站建设阿里主机wordpress
  • 淘宝优惠券网站怎么做的产品设计手绘图片
  • 百度怎样收录网站找客源用哪个软件好
  • 深圳常平网站建设制作公司网络营销试题
  • 网页设计与网站建设完全学习手册pdf有什么免费做代理的网站
  • 加强心理咨询网站的建设牛商网建设的食品网站
  • 广东省建设工程执业资格注册中心网站哈佛门户网站建设特点
  • 网站开发设计网站建设时怎么附加数据库
  • 怎么申请做网站可以做公众号的网站吗
  • 阿里巴巴国际站可以做网站吗工信部icp备案管理系统
  • 动力无限西安网站建设无为县住房和城乡建设局网站首页
  • 钟楼网站建设请打开123720的网站百度
  • 网站开发技术包括什么济南互联网公司排名
  • 网站建设在电访销售话术做网站空间费用是什么意思
  • 湘潭网站建设 问下磐石网络jsp网站开发源码实例
  • 海外域名注册网站加强网站的建设
  • 网站 案例静态网页模板源代码
  • 网站装修的代码怎么做的如何鉴赏网站论文
  • 博客网站如何设计检测WordPress主题的网站
  • 珠海门户网站建设哪家好昆明网站建设_云南网站建设
  • 网站买空间的价格怀柔富阳网站建设
  • 纯静态企业网站模板免费下载福田网站建设推广
  • 手机壳在线设计网站优改网logo设计免费官网
  • 自助建站平台源码南昌官网seo收费标准
  • 宜春市网站建设网站免费推广策划方案