java Bitmap 資料結構
轉自http://luozhong915127.iteye.com/blog/1460411
Bitmap演算法,
問題:對40億個資料進行排序,資料型別為 int,無相同資料。
思考:關於40億個資料的排序,首先想如何儲存呢?一個int 4個位元組,也就是160億個位元組,也就是大概有16GB的資料,現在所有的計算機估計
沒有這麼大的記憶體吧,所以我們就可以檔案歸併排序,也可以分段讀入資料在進行Qsort,但是都需要不停地讀入檔案,可以想象不停地讀取檔案硬體操作會有多麼浪費時間。
我們這樣都是用4個位元組來儲存了一個資料,在計算機裡都是用二進位制進行表示,
例如 5 :0000 0000 0000 0000 0000 0000 0000 0101
現在引入Bitmap,所謂Bitmap就是用一個bit來表示一個資料。平時32位儲存一個資料,我們可以換一種想法,用一個位元組32位來儲存0-31這32個資料,例如我們對2,1,5,12這四個資料進行由小到大的排序,首先把32位初始化為0,我們可以把這4個資料儲存為0000 0000 0000 0000 0001 0000 0010 0110
我們就把32位中的分別把 2 1 5 12位置為1,然後從第0位開始遍歷,看相應位是否為1,為1就進行輸出,就完成了資料從小到大的排序。
再返回原題應用Bitmap就可以把16GB的儲存空間縮小為16GB/32 = 512M,就可以大大減少讀取檔案的工作。直接讀一次檔案存入記憶體,然後遍歷輸出就完成了排序。
優點:既大量節省了空間,又把時間複雜度降低到O(n)。
不足:如果資料過於稀疏就會有大量無用遍歷,浪費時間。
對於幾億int資料如要查詢出相等的資料,利用Bitmap演算法,只是使byte達到了極限,也是一種解決問題的一種方法。下一篇描述講一下原始碼的
描寫。
相關文章
- 【資料結構與演算法】bitmap資料結構演算法
- Linux 核心資料結構:點陣圖(Bitmap)Linux資料結構
- Java資料結構Java資料結構
- bitmap indexes 的結構分析Index
- Java版-資料結構-棧Java資料結構
- Java資料結構-陣列Java資料結構陣列
- Java版-資料結構-連結串列Java資料結構
- JAVA資料結構之連結串列Java資料結構
- Java實現資料結構之線性結構Java資料結構
- 【 演算法與資料結構專場 】BitMap 演算法介紹演算法資料結構
- Java-常見資料結構Java資料結構
- Java版-資料結構-陣列Java資料結構陣列
- 圖解Java常用資料結構圖解Java資料結構
- Java 資料結構總結 (未完成)Java資料結構
- Java刷題常用的資料結構總結Java資料結構
- Java資料結構之Map學習總結Java資料結構
- Java資料結構之Set學習總結Java資料結構
- Java中的不可變資料結構Java資料結構
- JAVA資料結構之雜湊表Java資料結構
- 03.Java資料結構問題Java資料結構
- 資料結構(java)圖論作業資料結構Java圖論
- JAVA常用資料結構及原理分析Java資料結構
- java併發資料結構之CopyOnWriteArrayListJava資料結構
- 傳說中的資料結構_JAVA資料結構Java
- 資料結構與演算法(java)資料結構演算法Java
- Java中的資料結構(轉載)Java資料結構
- 《Java 高階篇》五:資料結構Java資料結構
- 資料結構與演算法——常用高階資料結構及其Java實現資料結構演算法Java
- 結構化資料、半結構化資料和非結構化資料
- 高效儲存的秘訣:bitmap 資料結構在標籤中的應用資料結構
- 【資料結構篇】認識資料結構資料結構
- java基礎(二):談談Java基本資料結構Java資料結構
- Java 程式設計技巧之資料結構Java程式設計資料結構
- Java的資料結構和演算法Java資料結構演算法
- Java 的 ArrayList 的底層資料結構Java資料結構
- Java常用資料結構之Set之TreeSetJava資料結構
- Java常用資料結構之Map-HashMapJava資料結構HashMap
- Java常用資料結構之Stack&VectorJava資料結構