資料結構之BITMAP

2021-08-04 06:57:04 字數 854 閱讀 1862

給40億個不重複的無符號整數,沒排過序。給乙個無符號整數,如何快速判斷乙個數是否在這40億個數中。

這個問題怎麼解決呢?

1)將40億資料儲存起來(儲存在陣列、鍊錶、樹中),再和該數判斷是否相等。

那我們思考一下需要多少記憶體:

2)借助點陣圖bitmap解決。

位圖(bitmap)

是用乙個陣列中的每個資料的每個二進位制位表示乙個數是否存在。1表示存在,0表示不存在。

相當於把陣列分成很多塊的空間,每一塊是32個位元位。

原來32個位元位放乙個資料,現在乙個位就可以放乙個資料。16gb/32=0.5gb=512mb。

點陣圖的實現:

#ifndef __bitmap_h__

#define __bitmap_h__

#includeusing namespace std;

#includeclass bitmap

void set(size_t x)

}void reset(size_t x)

}bool test(size_t x)

return false;

}void resize(size_t size)

private:

vector_a;

size_t _size;

};#endif //__bitmap_h__

資料結構 BitMap

問題 已知有n個整數,這些整數的範圍是 0,100 請你設計一種資料結構,使用陣列儲存這些資料,並提供兩種方法,分別是addmember和i ist.下面是這種資料結構的類的定義。思路1 用陣列儲存,查詢是否存在需要for迴圈n,有n個數那麼複雜度為o n 思路2 用陣列儲存,新增資料則arr in...

資料結構 bitmap剖析

最近在看 程式設計珠璣 這本書。第1章中引入了bitmap 位圖 的資料結構。以前沒有接觸過,抽空研究了一下,記錄下來。書中描述的情景 1.最多1000萬個7位數 號碼 號碼不重複,實際大概800萬個 儲存在文字中 2.每隔一段時間要對號碼進行排序 3.程式模組最多可用1m bytes的記憶體,磁碟...

C 實現BitMap資料結構

分治,分布式。bitmap 位圖 及其公升級版bloom filter是處理海量資料常用的方法,這裡先介紹bitmap概念及其c 實現。一 bitmap點陣圖 該資料結構描述了乙個有限定義域內的稠密集合,其中的每乙個元素最多出現一次並且沒有其他任何資料與該元素相關聯。即使這些條件沒有完全滿足 例如,...