a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C > 正文

數據結構之位圖(bitmap)詳解

2020-01-26 15:21:55
字體:
來源:轉載
供稿:網友

1.  概述

位圖(bitmap)是一種非常常用的結構,在索引,數據壓縮等方面有廣泛應用。本文介紹了位圖的實現方法及其應用場景。

2. 位圖實現

(1)自己實現
在位圖中,每個元素為“0”或“1”,表示其對應的元素不存在或者存在。

復制代碼 代碼如下:

#define INT_BITS sizeof(int)
 
#define SHIFT 5 // 2^5=32
 
#define MASK 0x1f // 2^5=32
 
#define MAX 1024*1024*1024 //max number
 
int bitmap[MAX / INT_BITS];
 
/*
 
* 設置第i位
 
* i >> SHIFT 相當于 i / (2 ^ SHIFT),
 
* i&MASK相當于mod操作 m mod n 運算
 
*/
 
void set(int i) {
 
bitmap[i >> SHIFT] |= 1 << (i & MASK);
 
}
 
//獲取第i位
 
int test(int i) {
 
return bitmap[i >> SHIFT] & (1 << (i & MASK));
 
}
 
//清除第i位
 
int clear(int i) {
 
return bitmap[i >> SHIFT] & ~(1 << (i & MASK));
 
}

(2)函數庫實現

C++的STL中有bitmap類,它提供了很多方法,詳見:http://www.cplusplus.com/reference/stl/bitset/

3.  位圖應用

3.1    枚舉
(1)全組合
字符串全組合枚舉(對于長度為n的字符串,組合方式有2^n種),如:abcdef,可以構造一個從字符串到二進制的映射關系,通過枚舉二進制來進行全排序。

復制代碼 代碼如下:

null――> 000000
f――> 000001
e――> 000010
ef――> 000011
……
abcedf――> 111111

(2)哈米爾頓距離

枚舉算法,復雜度是O(N^2),怎樣降低復雜度呢?
如果是N 個二維的點,那么我們可以怎么用較快的方法求出

通過簡單的數學變形,我們可以得到這樣的數學公式:

通過觀察,我們發現每一對相同元的符號必定相反,如:x_i-y_i,于是我們有了一個二進制思想的思路,那就是枚舉這些二i維的點的x 軸y 軸前的正負號,這樣就可以用一個0~3 的數的二進制形式來表示每個元素前面的正負號,1表示+號,0表示−號,如:2 表示的二進制位形式為10表示x_i-y_i。這樣我們就可以通過2^2*N次記錄下這些二元組的不同的符號的數值,對于每個二進制來表示的不同的式子只需記錄下他們的值,這樣我們只需求max_i 和min_i出這些相同的二進制表示的式子max_i

主站蜘蛛池模板: 久久这里只有精品首页 | 97久久精品人人做人人爽50路 | 国产羞羞视频在线观看 | 日韩国产在线 | 欧美日韩不卡合集视频 | caoporon| 国产精品国产自产拍高清 | 中文字幕 在线观看 | 国产精品美女久久久久aⅴ国产馆 | 亚洲日本欧美日韩高观看 | www.国产| 国产馆一区二区 | 在线观看你懂的网站 | 在线观看亚洲视频 | 天天操天天拍 | 亚洲欧美精品 | 自拍偷拍欧美日韩 | 欧美在线二区 | 91社区在线高清 | 91污视频软件 | 制服 丝袜 激情 欧洲 亚洲 | 中文字幕高清av | 久久国产综合 | 九九热精品视频 | 欧洲毛片 | 黄色网址免费 | 精品久久久久国产免费 | 国产福利一区二区三区四区 | 国产欧美日韩综合精品一区二区 | 免费av一区二区三区 | 日韩在线无| 在线日韩 | 国产精品爱久久久久久久 | 91视频一88av | 在线日韩 | 免费黄色av| 日韩在线观看中文字幕 | 久久国产精品一区 | 精品少妇一区二区三区日产乱码 | 欧美一级在线观看视频 | 91九色在线观看 |