位圖(c++)

文章目錄

    • 1.位圖概念
    • 2.位圖的實現
    • 3.應用(解決整形存在或次數問題)
      • 3.1存在問題
      • 3.2次數問題
    • 5.搜索的方法對比:

1.位圖概念

和哈希一樣,都是一個表來記錄某個元素的個數或者存在與否;不同的是哈希使用的計算機定義的完整空間向數組的int類型;而位圖則是時使用一個或者多個(不會太多)bit位來表示表示一個數字的個數或者存在與否。

2.位圖的實現

第一步定義空間.
位圖由于是使用bit位來記錄的,但是單個bit位無法開出來,所以我們先可以使用int定義出來空間(即定義一個可以下位圖的空間);
在這里插入圖片描述
第二步定義類中的接口
構造函數:
在這里插入圖片描述
輸入函數:
在這里插入圖片描述
刪除函數:
在這里插入圖片描述

查找函數:
在這里插入圖片描述
解釋i和j:
這里刪除函數和輸入函數的i表示的是:數x在數組的第幾個數;
這里刪除函數和輸入函數的j表示的是:數x在數組的第i個數的第幾個bit位;

代碼

	//位圖template<size_t N>class bitset{public:bitset(){//_bits.resize(N/32+1,0);_bits.resize((N >> 5) + 1, 0);}void set(size_t x){size_t i = x / 32;size_t j = x % 32;_bits[i] |= (1 << j);}void reset(size_t x){size_t i = x / 32;size_t j = x % 32;_bits[i] &= ~(1 << j);}bool test(size_t x){size_t i = x / 32;size_t j = x % 32;return _bits[i] & (1 << j);}private:vector<int> _bits;};

3.應用(解決整形存在或次數問題)

3.1存在問題

在【42,39】中是否存在39,40,41,42;
頭文件和上面的一樣

template<size_t N>class bitset{public:bitset(){//_bits.resize(N/32+1,0);_bits.resize((N >> 5) + 1, 0);}void set(size_t x){size_t i = x / 32;size_t j = x % 32;_bits[i] |= (1 << j);}void reset(size_t x){size_t i = x / 32;size_t j = x % 32;_bits[i] &= ~(1 << j);}bool test(size_t x){size_t i = x / 32;size_t j = x % 32;return _bits[i] & (1 << j);}private:vector<int> _bits;};

源文件:

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
#include"bitset.h"
int main()
{bit::bitset<100> bs;bs.set(40);bs.set(39);cout << bs.test(38) << endl;cout << bs.test(39) << endl;cout << bs.test(40) << endl;cout << bs.test(41) << endl;cout << bs.test(42) << endl << endl;return 0;
}

在這里插入圖片描述

3.2次數問題

題目:查找【1,4,7,9,44,88,1,4,88,99,78,5,7 ,7,7,7 】中出現一次和兩次的數字
對比存在問題需將插入函數和輸出函數修改即可修改在下:
頭文件:

 template<size_t N>class twobitset{public:void set(size_t x){//00->01//01->10//10->11//11->不變if (_bs1.test(x) == false && _bs2.test(x) == false){_bs2.set(x);}else if (_bs1.test(x) == false && _bs2.test(x) == true){_bs1.set(x);_bs2.reset(x);}else if (_bs1.test(x) == true && _bs2.test(x) == false){_bs1.set(x);_bs2.set(x);}}void Print(){for (size_t i = 0; i < N; i++){if (_bs1.test(i) == false && _bs2.test(i) == true){cout << "1->" << i << endl;}else if (_bs1.test(i) == true && _bs2.test(i) == false){cout << "2->" << i << endl;}}cout << endl;}private:bitset<N> _bs1;bitset<N> _bs2;};

源文件:

int main()
{int a[] = { 1,4,7,9,44,88,1,4,88,99,78,5,7 ,7,7,7 };bit::twobitset<100> bs;for (auto e : a){bs.set(e);}bs.Print();return 0;
}

在這里插入圖片描述

5.搜索的方法對比:

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/12477.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/12477.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/12477.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

旅游卡創業的機會在哪里?

在當今社會&#xff0c;旅游已經成為了人們休閑娛樂的重要方式之一。 隨著經濟的發展和人們生活水平的提高&#xff0c;越來越多的人開始追求更高品質的旅游體驗。因此&#xff0c;旅游卡創業應運而生&#xff0c;為游客提供了更加便捷、實惠的旅游服務。那么&#xff0c;旅游…

群輝部署小雅alist實現視聽盛會

最近群輝搭建起來了&#xff0c;開始整蠱影視庫&#xff0c;之前搞過nastool。這次折騰下小雅alist。 1.下載并安裝 直接在群輝的docker里面下載映像 主要映射下端口和文件夾 #token mytoken.txt 獲取地址&#xff1a;https://alist.nn.ci/zh/guide/drivers/aliyundriv…

Git使用(2):遠程倉庫

一、創建遠程倉庫 登錄碼云Gitee - 基于 Git 的代碼托管和研發協作平臺。 點擊右上角&#xff0c;新建倉庫。 創建完成&#xff0c;復制倉庫地址接下來要使用。 二、將idea項目推送到碼云 首先創建本地倉庫VCS -> Create Git Repository。然后選擇Manage Remotes&#xff0…

服務器是網絡中的重要設備

眾所周知&#xff0c;服務器是網絡中的重要設備&#xff0c;要接受少至幾十人、多至成千上萬人的訪問&#xff0c;因此對服務器具有大數據量的快速吞吐、超強的穩定性、長時間運行等嚴格要求。但是&#xff0c;今天我們了解的是GPU服務器&#xff0c;很明顯&#xff0c;從字面上…

機器學習的目的

機器學習的目的是讓計算機能夠從數據中學習并改善性能&#xff0c;以執行特定的任務而無需明確的編程指令。具體來說&#xff0c;機器學習旨在實現以下幾個主要目標&#xff1a; 1. 預測與泛化&#xff1a; 機器學習的一個主要目標是通過學習數據的模式和特征&#xff0c;從而對…

舊衣回收,整個項目環節詳細拆解

日常舊衣服很多人果斷丟垃圾箱&#xff0c;殊不知這背后隱藏著商機。大把人都在掘金的項目。 舊衣回收&#xff0c;眼下市場覆蓋率才占10%。絕對的藍海&#xff0c;干這種項目成本很低。小到自家的舊衣回收能換小錢&#xff0c;大到開公司做分揀撈利潤。 說到這里&#xff0c…

用友hr軟件統一認證與致遠OA單點登錄身份周期管理怎么做

一、引言 隨著企業信息化建設的深入&#xff0c;各類管理軟件如用友HR、致遠OA等已經成為事業單位日常運營不可或缺的工具。用友HR軟件以其強大的人力資源管理功能&#xff0c;幫助企事業單位實現員工信息的集中管理&#xff1b;而致遠OA則以其便捷的辦公流程管理&#xff0c;…

機器學習概念:一些基本概念

目錄 數據集 (Dataset)&#xff1a;用于訓練和評估模型的數據集合。 特征 (Feature)&#xff1a;描述數據的屬性或變量&#xff0c;用于訓練模型。 標簽 (Label)&#xff1a;在監督學習中&#xff0c;與輸入數據相關聯的輸出結果。 模型 (Model)&#xff1a;對數據的某種假…

springcloud簡單了解及上手

springcloud微服務框架簡單上手 文章目錄 springcloud微服務框架簡單上手一、SpringCloud簡單介紹1.1 單體架構1.2 分布式架構1.3 微服務 二、SpringCloud與SpringBoot的版本對應關系2022.x 分支2021.x 分支2.2.x 分支 三、Nacos注冊中心3.1 認識和安裝Nacos3.2 配置Nacos3.3 n…

C++ 并發編程指南(11)原子操作 | 11.6、計算機內存結構

文章目錄 一、計算機內存結構1、內存的基本組成2、內存的類型3、內存的結構層次4、CPU架構5、局部性原理6、總結 前言 在探討計算機的運行效率和數據處理能力時&#xff0c;內存結構無疑是一個至關重要的部分。內存&#xff0c;作為計算機系統中的關鍵組件&#xff0c;承擔著存…

vue從入門到精通(一):Vue模板語法

一&#xff0c;模板語法 Vue 使用一種基于 HTML 的模板語法&#xff0c;使我們能夠聲明式地將其組件實例的數據綁定到呈現的 DOM 上。所有的Vue模板都是語法層面合法的 HTML&#xff0c;可以被符合規范的瀏覽器和 HTML 解析器解析。 Vue模板語法有2大類: 插值語法: 功能:用于解…

請介紹下H264的多參考幀技術及其應用場景,并請說明下為什么要有多參考幀?

H.264&#xff08;也稱為H.264/AVC&#xff09;的多參考幀機制是其編碼效率和質量提升的關鍵部分。這個機制允許編碼器在編碼當前幀時&#xff0c;參考多個之前已編碼的幀。這種多參考幀的方法為編碼器提供了更多的選擇&#xff0c;使其能夠更準確地預測當前幀的內容&#xff0…

【保姆級介紹自動化的講解】

&#x1f308;個人主頁: 程序員不想敲代碼啊 &#x1f3c6;CSDN優質創作者&#xff0c;CSDN實力新星&#xff0c;CSDN博客專家 &#x1f44d;點贊?評論?收藏 &#x1f91d;希望本文對您有所裨益&#xff0c;如有不足之處&#xff0c;歡迎在評論區提出指正&#xff0c;讓我們共…

SCP‘s Story

越過“第二夜”的星星&#xff0c;越過“邁克爾連續線”和“禁運線”&#xff0c;在“煤炭之路”最遠的一站&#xff0c;有一顆眼淚。這不是織物或紙上的撕裂&#xff0c;而是現實中的撕裂&#xff0c;是物理定律和常識失效的地方。 有些人稱之為黑洞&#xff0c;銀河系中最大…

【C語言】4.C語言數組(2)

文章目錄 6. 二維數組的創建6.1 ?維數組的概念6.2 ?維數組的創建 7. 二維數組的初始化7.1 不完全初始化7.2 完全初始化7.3 按照?初始化7.4 初始化時省略?&#xff0c;但是不能省略列 8. 二維數組的使用8.1 ?維數組的下標8.2 ?維數組的輸?和輸出 9. 二維數組在內存中的存…

利用一段代碼輕松繞過PHP授權系統

利用一段代碼輕松繞過PHP授權系統 第一步&#xff1a;首先你需要改名全局文件 比如說全局文件 common.php&#xff0c;那么 你將他改為core.php 第二步&#xff1a;創建文件 創建一個文件&#xff0c;和改名前的全局文件名稱一樣&#xff0c;然后把以下代碼復制進去就OK了 …

行列視在做報表之前需要準備哪些前期工作

行列視是一款功能強大的生產數據分析和報表生成工具&#xff0c;使用它進行報表制作之前&#xff0c;確實需要一些前期準備工作&#xff0c;以確保報表的準確性和有效性。以下是進行行列視報表制作前需要準備的一些關鍵步驟&#xff1a; 1.明確報表需求&#xff1a; - 確定報表…

【MySQL01】【 Explain 命令詳解】

文章目錄 一、前言二、Explain 概覽三、Explain 詳解1. id2. select_type3. table4. type5. possible_keys6. key7. key_len8. ref9. rows10. filtered11. extra 列 四、補充1. EXPLAIN 擴展1.1 Extend EXPLAIN1.2 JSON 格式的執行計劃 2. Intersection、Union、Sort-Union 索引…

使用C++實時讀取串口數據(window使用已編譯LibModbus庫并用QT實現一個實時讀取串口數據)

先看這篇文章&#xff0c;寫得很詳細: QT應用篇 四、window編譯LibModbus庫并用QT編寫一個Modbus主機 手把手教學 編譯好的LibModbus庫可以在上面文章里下載&#xff0c;也可以在我的鏈接里下載&#xff1a; 為了在Qt Creator中創建新項目并嵌入上述C代碼&#xff0c;請執行以…

Linux監控apache腳本

監控apache腳本&#xff1a; 1、每十分鐘檢查apache是否正常運行 分析&#xff1a;進程在運行如何判斷 1&#xff09;lockfile是否存在 2&#xff09;pid是在后臺存在 3&#xff09;能否正常訪問頁面 2、如果apache運行不正常&#xff08;進程死亡、頁面訪問也不正常等情況&am…