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

设计网站的步骤花生壳无法穿透访问wordpress

设计网站的步骤,花生壳无法穿透访问wordpress,wordpress 评论倒序,网站建设专家排名目录 一.问题导入 二.什么是位图? 2.1如何确定目标数在哪个比特位? 2.2如何存放高低位 2.3位图模拟代码实现 2.3.1如何标记一个数 2.3.2如何重置标记 2.3.3如何检查一个数是否被标记 整体代码实现 标准库的Bitset 库中的bitset的缺陷 简单应用 一.问题导入 这道…目录 一.问题导入 二.什么是位图? 2.1如何确定目标数在哪个比特位? 2.2如何存放高低位 2.3位图模拟代码实现 2.3.1如何标记一个数 2.3.2如何重置标记 2.3.3如何检查一个数是否被标记 整体代码实现 标准库的Bitset 库中的bitset的缺陷 简单应用 一.问题导入 这道题直接使用遍历,效率太差,不推荐使用; 第二种方法就是先排序二分查找:肯呢个有些人会觉得,排序的代价太大了;其实不然,我们只需要排序一次那么接下来的查找就好办了; 对于二分查找,效率是O(logn),根据2^101024,那2^30的数量级就是10^9,就已经上升到亿了,2^32大约就是40亿;所以我们使用二分在40亿个数中查找一个数最多只需要查找32次就可以了,效率是相当客观的; 那么问题来了:我们排序的数据是在内存中的,但是我们能在内存中直接开出40亿个整形吗?来计算一下; 答案肯定是不行的;1GB1024MB1024*1024KB1024*1024*1024B(B是字节),10^9量级大约等于10亿多字节;一个整形4字节,40亿个整形就是16*10^9字节,相当于是16亿G; 所以40亿个整数是无法直接放到内存中的,只能放到硬件文件中,而二分查找只能堆内存中的数组中的有序数据进行查找; 针对上述的空间问题,我们可以使用位图思想来实现; 二.什么是位图? 我们都知道一个字节占8个比特位,每个比特位上储存的是二进制数0和1,那我们就可以在每个比特位上根据1或0,来判断是否存在一个数; 2.1如何确定目标数在哪个比特位? 这个问题其实并不难,我们采用无符号整形构造位图,一个整形占4字节,也就是32个比特位,那这样一个整形中我就可以标记32个数; 那如果我要标记35呢? 第一个整形可以标记的数是0-31,第二个整形可以标记的数是31-63......通过观察我们可以得到结论:35在第二个整形中,在第4个比特位也就是下标为3; 结论:N在第N/32个整形中,所在比特位的下标为N%32; 2.2如何存放高低位 我们都知道二进制数排列是从低位向高位的,而按位左移也是从低位向高位的; 同样的在位图中每个整形的存储方式也是如此;那么我们可以推断数值在位图中存储形态; 我们来分析一下: 首先,我要标记一个数1,这个数在第1个整形中,所占比特位下标为1;然后我们在看看2是在哪里标记的;2同样在第一个整形中,比特位下标为2,我们来看比特位高低位分布,2是不是在1的左边; 在一个数的比特位中,高位数的值大于低位数的值; 所以左边存储的是较大的数;右边存储的是较小的数; 2.3位图模拟代码实现 我们先来把整体框架来实现一下: template size_t N//非类型模板参数N:一共有多少个数 class bitset { public:bitset():_bs(ceil(N/32.0))//根据模版的N开整形空间{}void set(int n);//标记数void reset(int n);//重置标记bool test(int n);//检查该数是否标记private:vectorint_bs; //使用变长数组模拟 }; 2.3.1如何标记一个数 现在如果我们要标记一个数,那我们需要先确定这个数在第几个整形中和第几个比特位;i是所在整形的下标,j是所在比特位的下标: iN/32; jN%32; 我们通常是将1左移j位然后或上_bs[i]; template size_t N//非类型模板参数N:一共有多少个数 class bitset { public:bitset():_bs(ceil(N/32.0))//根据模版的N开整形空间:(ceil是向上取整){}void set(int n) {int i n / 32;//找到所在整形的下标int j n % 32;//找到所在整形中对应的比特位_bs[i] | 1 j; }void reset(int n);bool test(int n);//检查该数是否标记private:vectorint_bs; //使用变长数组模拟 }; 2.3.2如何重置标记 我们只需要将该比特位上~(1j)即可; template size_t N//非类型模板参数N:一共有多少个数 class bitset { public:bitset():_bs(ceil(N/32.0))//根据模版的N开整形空间:(ceil是向上取整){}void set(int n) {int i n / 32;//找到所在整形的下标int j n % 32;//找到所在整形中对应的比特位_bs[i] | 1 j; }void reset(int n) {int i n / 32;//找到所在整形的下标int j n % 32;//找到所在整形中对应的比特位_bs[i] ~(1 j); }bool test(int n);//检查该数是否标记private:vectorint_bs; //使用变长数组模拟 }; 2.3.3如何检查一个数是否被标记 判断一个比特位是否是1:将该比特位1,如果是1那就是1,如果是0那就是0; template size_t N//非类型模板参数N:一共有多少个数 class bitset { public:bitset():_bs(ceil(N/32.0))//根据模版的N开整形空间:(ceil是向上取整){}void set(int n) {int i n / 32;//找到所在整形的下标int j n % 32;//找到所在整形中对应的比特位_bs[i] | 1 j; }void reset(int n) {int i n / 32;//找到所在整形的下标int j n % 32;//找到所在整形中对应的比特位_bs[i] ~(1 j); }bool test(int n){int i n / 32;//找到所在整形的下标int j n % 32;//找到所在整形中对应的比特位return _bs[i] (1 j); }private:vectorint_bs; //使用变长数组模拟 }; 整体代码实现 #includeiostream #includevector #includeBitset using namespace std; namespace bit {template size_t Tclass bitset{public:bitset():_bs(ceil(T/32.0)){}void set(int n){int i n / 32;//找到所在整形的下标int j n % 32;//找到所在整形中对应的比特位_bs[i] | 1 j;}void reset(int n){int i n / 32;//找到所在整形的下标int j n % 32;//找到所在整形中对应的比特位_bs[i] ~(1 j); }bool test(int n){int i n / 32;//找到所在整形的下标int j n % 32;//找到所在整形中对应的比特位return _bs[i] (1 j); }private:vectorint_bs; }; } 标准库的Bitset 其中最核心的就是set和reset;其他的了解即可; 库中的bitset的缺陷 我们模拟实现的bitset底层是使用的vector,而vector的空间来自堆上;这就意味着,我们开一个比较大的空间时bitset的大小是不变的;一直都是vectorint的大小; 我们来验证一下: 结果一直都是32;为什么是32呢;根据我们在前面Vector的模拟实现可以得知,32是多个指针所占的内存空间; 那标准库中的bitset是什么样的呢? 标准库中的bitset底层是使用静态数组实现的;那么这就意味着空间是在堆栈上开辟的;其实堆栈是很小的,所以当我们开出一块很大的空间的时候容易出现问题; 所以当数据量十分巨大的时候我们尽量使用自己构造的bitset; 另外就是当我们使用我们的bitset-1bs时,是可以开出很大的空间的; 但是库中的bitset不支持此操作; 简单应用 这道题是有100亿个数,并且要统计次数,有效的次数就是0,1,2,3;正好占2个比特位,可以使用两个比特位来表示出现的次数; 这道题就是要是使用两个位图协同进行标记; 具体思路:封装两个位图-twoset,底层是bitset1e10bs1,bitset1e10bs2;分别代表n出现次数的两个比特位; 代码实现: #includeiostream #includevector #includeBitset using namespace std; namespace bit {template size_t N class bitset{public:bitset():_bs(ceil(N/32.0)) {}void set(int n){int i n / 32;//找到所在整形的下标int j n % 32;//找到所在整形中对应的比特位_bs[i] | 1 j;}void reset(int n){int i n / 32;//找到所在整形的下标int j n % 32;//找到所在整形中对应的比特位_bs[i] ~(1 j); }bool test(int n){int i n / 32;//找到所在整形的下标int j n % 32;//找到所在整形中对应的比特位return _bs[i] (1 j); }private:vectorint_bs; };template size_t Tclass twoset{public:twoset() default;void set(size_t n){//00-01if (!bs1.test(n) !bs2.test(n)){bs2.set(n);}else if (!bs1.test(n) bs2.test(n))//01-10{bs1.set(n);bs2.reset(n);}else//10-11{bs2.set(n);}}int get_count(int n){return bs1.test(n)*2 bs2.test(n);}private:bitsetTbs1; bitsetTbs2; };}我的博客即将同步至腾讯云开发者社区邀请大家一同入驻https://cloud.tencent.com/developer/support-plan?invite_code3te3qaa7daww8
http://www.hkea.cn/news/14572298/

相关文章:

  • 网站的开发工具有哪些天猫网站设计教程
  • 贵州省住房和城乡建设厅网站(域名怎么拿来做网站
  • 企业网站怎么扣费的网站建站公司哪家价钱合理
  • 休闲食品网站建设目的wordpress主题cute
  • 沟通交流类网站有哪些游戏开发平台
  • 网站搭建有分谷歌东莞外贸网站建设
  • wordpress手机pc分开模板南京seo域名
  • 织梦dedecms网站内容页word页面设计
  • 淘宝客网站开发视频教程百度学术论文查重
  • 电子商务网站建设与管理基础seo可以从哪些方面优化
  • 重庆平台网站建设多少钱内部搜索引擎优化
  • 嘉兴 网站建设珠宝公司网站模板
  • 全国工程建设信息网站找别人做的网站怎样修改
  • linux 网站服务器搭建南宁网站优化公司电话
  • 公司网站怎么建设百度贴吧引流推广方法
  • 知名中文网站建设揭阳专业网站设计公司
  • 网站怎么做支付宝接口flas网站开发工具
  • 九曲网站建设入职中企动力一月有感
  • 网站框架图企业宣传片策划公司
  • 网站做百度竞价网站建好了 怎么建后台
  • 做网站知名的学习网站佛山省钱网站设计哪家便宜
  • 湘潭做网站 联系磐石网络泌阳专业网站建设
  • 太原建设厅网站网站流量报表
  • 网站建设目录怎么查公司联系方式
  • 漳州市东山县建设局网站网站建设合同有效期
  • 惠山区住房和建设厅网站3g手机网站建设
  • 运城手机网站建设建站公司最喜欢的网站
  • 和龙市建设局网站wordpress 不在根目录
  • 网站体验方案西宁网站制作费用是多少
  • .net简单网站开发视频教程简述网页制作的步骤