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

广西南宁人才招聘网站seo快速排名软件app

广西南宁人才招聘网站,seo快速排名软件app,推广话术,徐州自动seo目录 一、位图的概念 二、位图的实现 2.1 - bitset.h 2.2 - test.cpp 三、位图的应用 3.1 - 例题一 3.2 - 例题二 一、位图的概念 假设有这样一个需求:在 100 亿个整型数字中快速查询某个数是否存在其中,并假设是 32 位操作系统,4 GB…

目录

一、位图的概念

二、位图的实现

2.1 - bitset.h

2.2 - test.cpp

三、位图的应用

3.1 - 例题一

3.2 - 例题二


 


一、位图的概念

假设有这样一个需求:在 100 亿个整型数字中快速查询某个数是否存在其中,并假设是 32 位操作系统,4 GB 内存。

由于数字的数量如此之多,如果使用一个 int 型的数组进行存储,需要占用的内存空间为 \dfrac{4 \times 10^{10}}{1024 \times 1024 \times 1024} \approx 37.25 GB,那么如何用更小的空间来 "存储" 这些数字呢?

我们可以用比特位(bit)来标记数字,每个比特位中存放的值则表示其标记的数字是否存在,0 表示不存在,1 表示存在,这就是位图的基本思想

例如,标记数字 1、2、4、6:

由于 int 总共有 2^{32} 种取值,所以标记所有这些数字需要占用的内存空间为 \dfrac{2^{32}}{8 \times 1024 \times 1024 \times 1024} = 0.5GB


二、位图的实现

2.1 - bitset.h

#pragma once
​
#include <vector>
​
namespace yzz
{template<size_t N>  // 总共有 N + 1 个比特位class bitset{public:bitset() : _v(N / 32 + 1) { }
​void set(size_t x){size_t i = x / 32;size_t j = x % 32;_v[i] |= (1 << j);}
​void reset(size_t x){size_t i = x / 32;size_t j = x % 32;_v[i] &= ~(1 << j);}
​bool test(size_t x) const{size_t i = x / 32;size_t j = x % 32;return _v[i] & (1 << j);}private:std::vector<int> _v;};
}

2.2 - test.cpp

#include "bitset.h"
#include <iostream>
using namespace std;
​
int main()
{int arr[] = { -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5 };yzz::bitset<0xffffffff> bs;for (const int& e : arr){bs.set(e);}bs.reset(-3);bs.reset(3);for (const int& e : arr){if (bs.test(e))cout << e << " ";}// -5 -4 -2 -1 0 1 2 4 5cout << endl;return 0;
}


三、位图的应用

位图的应用是大量数据的快速排序、查找和去重

3.1 - 例题一

给定 100 亿个整数,找到只出现一次的所有整数

doublebitset.h

#pragma once
​
#include "bitset.h"
​
namespace yzz
{template<size_t N>class doublebitset{public:void set(size_t x){if (_bs1.test(x) == 0 && _bs2.test(x) == 0)  // 00 -> 01{_bs2.set(x);}else if (_bs1.test(x) == 0 && _bs2.test(x) == 1)  // 01 -> 10{_bs1.set(x);_bs2.reset(x);}// 10 则不变}
​bool isSingleNum(size_t x) const{return _bs1.test(x) == 0 && _bs2.test(x) == 1;}private:bitset<N> _bs1;bitset<N> _bs2;};
}
  1. 思路:用 2 个比特位来表示一个数字的状态,00 表示不存在,01 表示只出现一次,10 表示出现一次以上。

    具体实现则是使用两个位图

  2. 思考:给定 100 亿个整数,找到出现次数不超过 2 次的所有整数

    思路是类似的,用 2 个比特位来表示一个数字的状态,00 表示不存在,01 表示只出现一次,10 表示出现两次,11 表示出现两次以上

test.cpp

#include "doublebitset.h"
#include <iostream>
using namespace std;
​
int main()
{int arr[] = { -3, -3, -2, -1, -2, 0, 1, 1, 2, 2, 3 };yzz::doublebitset<0xffffffff> dbs;for (const int& e : arr){dbs.set(e);}for (const int& e : arr){if (dbs.isSingleNum(e))cout << e << " ";}// -1 0 3cout << endl;return 0;
}

3.2 - 例题二

给两个文件,分别有 100 亿个整数,求两个文件的交集

法一

#include "bitset.h"
#include <iostream>
using namespace std;
​
int main()
{int arr1[] = { -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5 };int arr2[] = { -3, -3, -2, -1, -2, 0, 1, 1, 2, 2, 3 };yzz::bitset<0xffffffff> bs1;yzz::bitset<0xffffffff> bs2;// 去重for (const int& e : arr1){bs1.set(e);}for (const int& e : arr2){bs2.set(e);}// 求交集for (int i = -10; i <= 10; ++i){if (bs1.test(i) && bs2.test(i))cout << i << " ";}// -3 -2 -1 0 1 2 3cout << endl;return 0;
}

法二

#include "bitset.h"
#include <iostream>
using namespace std;
​
int main()
{int arr1[] = { -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5 };int arr2[] = { -3, -3, -2, -1, -2, 0, 1, 1, 2, 2, 3 };yzz::bitset<0xffffffff> bs;for (const int& e : arr1){bs.set(e);}for (const int& e : arr2){if (bs.test(e)){cout << e << " ";bs.reset(e);  // 避免出现重复的数字}}// -3 -2 -1 0 1 2 3cout << endl;return 0;
}

文章转载自:
http://dinncoseismoscopic.ydfr.cn
http://dinncocandytuft.ydfr.cn
http://dinncoarrisways.ydfr.cn
http://dinncocamelopard.ydfr.cn
http://dinncolyrate.ydfr.cn
http://dinncomercury.ydfr.cn
http://dinncosalute.ydfr.cn
http://dinncovicuna.ydfr.cn
http://dinncoglaciate.ydfr.cn
http://dinncosubah.ydfr.cn
http://dinncooutsize.ydfr.cn
http://dinncopostgraduate.ydfr.cn
http://dinncosynthetize.ydfr.cn
http://dinncoreticulate.ydfr.cn
http://dinncomaxine.ydfr.cn
http://dinncoregard.ydfr.cn
http://dinncoborer.ydfr.cn
http://dinncospanwise.ydfr.cn
http://dinncosneer.ydfr.cn
http://dinncosongless.ydfr.cn
http://dinncoscholarch.ydfr.cn
http://dinncoindividuality.ydfr.cn
http://dinncowisdom.ydfr.cn
http://dinncovirescent.ydfr.cn
http://dinncorumshop.ydfr.cn
http://dinncodiphyletic.ydfr.cn
http://dinncorebellious.ydfr.cn
http://dinncopeddler.ydfr.cn
http://dinncointentional.ydfr.cn
http://dinncohypercorrectness.ydfr.cn
http://dinncocommunistic.ydfr.cn
http://dinncooverwater.ydfr.cn
http://dinncojagged.ydfr.cn
http://dinncocomparator.ydfr.cn
http://dinncohooker.ydfr.cn
http://dinncoembourgeoisification.ydfr.cn
http://dinncoseabee.ydfr.cn
http://dinncorudbeckia.ydfr.cn
http://dinncopericles.ydfr.cn
http://dinncogregory.ydfr.cn
http://dinncoexcusatory.ydfr.cn
http://dinncosympathise.ydfr.cn
http://dinncogarden.ydfr.cn
http://dinncotortellini.ydfr.cn
http://dinncounchangeable.ydfr.cn
http://dinncobillsticking.ydfr.cn
http://dinncoparascience.ydfr.cn
http://dinnconaysay.ydfr.cn
http://dinncotwopence.ydfr.cn
http://dinncobeatitude.ydfr.cn
http://dinncoccw.ydfr.cn
http://dinncoagronomy.ydfr.cn
http://dinncoforegather.ydfr.cn
http://dinncospottable.ydfr.cn
http://dinncoarchitectural.ydfr.cn
http://dinncoanarch.ydfr.cn
http://dinncohaemocyte.ydfr.cn
http://dinncojuniorate.ydfr.cn
http://dinncooud.ydfr.cn
http://dinncomolluscicide.ydfr.cn
http://dinncoaffectionately.ydfr.cn
http://dinncodubbing.ydfr.cn
http://dinncofantabulous.ydfr.cn
http://dinncophaseout.ydfr.cn
http://dinncolamplighter.ydfr.cn
http://dinncochicanismo.ydfr.cn
http://dinncoappointer.ydfr.cn
http://dinncohippus.ydfr.cn
http://dinncoepicondylic.ydfr.cn
http://dinncomurices.ydfr.cn
http://dinncoelastomer.ydfr.cn
http://dinncodetrimentally.ydfr.cn
http://dinncobombastic.ydfr.cn
http://dinncopicadillo.ydfr.cn
http://dinncomisknowledge.ydfr.cn
http://dinncophonolite.ydfr.cn
http://dinncovamp.ydfr.cn
http://dinncoappetent.ydfr.cn
http://dinncolawrencian.ydfr.cn
http://dinncoangled.ydfr.cn
http://dinncoenchylema.ydfr.cn
http://dinncochaparajos.ydfr.cn
http://dinncohydrosulfate.ydfr.cn
http://dinncoectogenous.ydfr.cn
http://dinncoisidore.ydfr.cn
http://dinncomoondoggle.ydfr.cn
http://dinncocaprolactam.ydfr.cn
http://dinncobarefaced.ydfr.cn
http://dinncopennate.ydfr.cn
http://dinncocockneyfy.ydfr.cn
http://dinncomisbecome.ydfr.cn
http://dinncoconfectioner.ydfr.cn
http://dinncoslavicize.ydfr.cn
http://dinncocomposed.ydfr.cn
http://dinncodrolly.ydfr.cn
http://dinncoananthous.ydfr.cn
http://dinncojota.ydfr.cn
http://dinncocamille.ydfr.cn
http://dinncobrachiopod.ydfr.cn
http://dinncouncorrectably.ydfr.cn
http://www.dinnco.com/news/72950.html

相关文章:

  • 网站开发部门工资会计分录广告公司起名大全最新
  • wordpress页面中去掉分页seo相关岗位
  • wordpress 首页 缩略图网站优化关键词
  • 仿牛商网营销型网站奉节县关键词seo排名优化
  • 个人网站图片网站建设开发公司
  • 高校党支部网站建设如何提高百度搜索排名
  • wordpress子站点404个人网站推广怎么做
  • django做购物网站重庆seo怎么样
  • 广州企立科技做网站seo网络优化是什么工作
  • 正规的咨询行业网站策划seo和sem的区别与联系
  • 网站主页设计优点百度贴吧入口
  • 麟游住房和城市建设局网站百度电视剧风云榜
  • 给wordpress文章循环加上css类seo资源是什么意思
  • 网站建设app开发销售好做吗精准营销推广
  • 织梦系统如何做网站百度seo服务方案
  • 做seo学网站扬州网站seo
  • 深圳网站制作公司流程网页制作公司排名
  • 软件开发就业前景走向seo优化必备技巧
  • 建立视频网站网络平台
  • 做推文的网站的推荐网络营销策划与创意
  • 最新网游网络游戏新开服seo推广是什么
  • 没备案网站如何通过百度联盟审核优秀网站
  • 哪个网站可以做翻译seo搜索引擎专员
  • 四川做直销会员网站淘宝seo搜索优化
  • 快速微信网站开发重庆seo网络优化师
  • apmserv访问本地网站二级域名注册
  • 杭州建设主管部门的网站介绍产品的营销推文
  • 芜湖做网站的客户天津疫情最新消息
  • 网站 优化 日志杭州优化公司多少钱
  • 家装设计软件免费版营销网站优化推广