真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯網站制作重慶分公司

哈希表—位圖-創(chuàng)新互聯

原文鏈接:http://blog.csdn.net/qq_38646470/article/details/79427038
[1.什么是位圖?
2.位圖的用處?
3.位圖的結構
4.位圖題目操練
5.總結(優(yōu)缺點分析)]

1.什么是位圖?
位圖就是bitmap的縮寫。所謂bitmap,就是用每一位來存放某種狀態(tài),適用于大規(guī)模數據,但數據狀態(tài)又不是很多的情況。通常是用來判斷某個數據存不存在的。在STL中有一個bitset容器,其實就是位圖。

創(chuàng)新互聯專注為客戶提供全方位的互聯網綜合服務,包含不限于成都做網站、成都網站制作、格爾木網絡推廣、成都微信小程序、格爾木網絡營銷、格爾木企業(yè)策劃、格爾木品牌公關、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們大的嘉獎;創(chuàng)新互聯為所有大學生創(chuàng)業(yè)者提供格爾木建站搭建服務,24小時服務熱線:18980820575,官方網址:www.cdcxhl.com

所以我們可以了解到,位圖就是一個只用每一位來保存數的狀態(tài)的結構。

2.位圖的用處?
位圖主要用于海量數據處理,索引,數據壓縮等方面有廣泛應用
3.位圖的結構
關于位圖的結構,類似于哈希,位圖就是一個用每一位的0,1來表示一個數的狀態(tài)。

比如,我們現在有一個文件,這個文件中有數 1,5,4294967295。我們就把第1位,第5位,第4294967295位改為狀態(tài)1。

4.位圖題目操練
給4 0 億個不重復的無符號整數,沒排過序。給一個無符號整數,如何快速判斷一個數是否在這4 0 億個數中。

題目分析:這是一道關于海量數據查找的題,其實這道題,我們就可以和哈希表聯系在一起,為何說是海量數據呢,對于一個40億整數,我們如果要存的話,按照無符號整數來存儲,那么下來,大概就需要40億*4這么些字節(jié),下來大概就是16G的 內存。

對于現在的64位機,普遍標配內存也就是4-8G的內存,顯而易見,16G是沒有辦法一次性處理的。那么我們如何是好?進行拆分?這樣顯然也是不好的,怎么拆,還有效率問題。
所以在這里我們采取一種新的思路,這種思路就是位圖。
位圖結構定義

typedef struct BitMap
{
    size_t* _bits;
    size_t _range;
}BitMap;

位圖相關接口

void BitMapInit(BitMap *bm,size_t range) //初始化
{
    assert(bm);
    bm->_bits = NULL;
    bm->_range = range;
    bm->_bits = (size_t *)malloc(sizeof(char)*bm->_range/8);
    assert(bm->_bits);
    memset(bm->_bits,0,sizeof(char)*bm->_range/8);
}

void BitMapSet(BitMap *bm,size_t x)//標記相應位
{
    size_t num = x>>5;
    size_t bit = x%32;

    bm->_bits[num] |=(1<>5;
    size_t bit = x%32;

    bm->_bits[num] &= (~(1<>5;
    size_t bit = x%32;

    if ((1<_bits[num])
        return 0;
    return -1;
}

測試案例及結果截圖:

void TestBitMap()
{
    BitMap bm;
    BitMapInit(&bm,-1);
    BitMapSet(&bm,5);
    BitMapSet(&bm,6);
    BitMapSet(&bm,7);
    BitMapSet(&bm,8);
    BitMapSet(&bm,-1);

    printf("%d\n",BitMapTest(&bm,4));
    printf("%d\n",BitMapTest(&bm,5));
    printf("%d\n",BitMapTest(&bm,6));
    printf("%d\n",BitMapTest(&bm,7));
    printf("%d\n",BitMapTest(&bm,8));
    printf("%d\n",BitMapTest(&bm,-1));
}


這道題中位圖結構代碼不難,注意理解思路,必須熟練掌握位運算。

5.總結
優(yōu)缺點:
(1)可讀性差
(2)位圖存儲的元素個數雖然比一般做法多,但是存儲的元素大小受限于存儲空間的大小。位圖存儲性質:存儲的元素個數等于元素的大值。比如, 1K 字節(jié)內存,能存儲 8K 個值大小上限為 8K 的元素。(元素值上限為 8K ,這個局限性很大?。┍热纾鎯χ禐?65535 的數,就必須要 65535/8=8K 字節(jié)的內存。要就導致了位圖法根本不適合存 unsigned int 類型的數(大約需要 2^32/8=5 億字節(jié)的內存)。
(3)位圖對有符號類型數據的存儲,需要 2 位來表示一個有符號元素。這會讓位圖能存儲的元素個數,元素值大小上限減半。 比如 8K 字節(jié)內存空間存儲 short 類型數據只能存 8K*4=32K 個,元素值大小范圍為 -32K~32K 。

另外有需要云服務器可以了解下創(chuàng)新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。


網頁名稱:哈希表—位圖-創(chuàng)新互聯
瀏覽路徑:http://weahome.cn/article/deidpi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部