分析:那么我們來看一個具體的例子,假設我們要對0-7內的5個元素(4,7,2,5,3)排序(這里假設這些元素沒有重復)。那么我們就可以采用Bit-map的方法來達到排序的目的。要表示8個數,我們就只需要8個Bit(1Bytes),首先我們開辟1Byte的空間,將這些空間的所有Bit位都置 ...
問題描述 輸入:一個最多包含n個正整數的文件,每個數都小於n,其中n 。如果在輸入文件中有任何正數重復出現就是致命錯誤。沒有其他數據與該正數相關聯。 輸出:按升序排列的輸入正數的列表。 約束:最多有 MB的內存空間可用,有充足的磁盤存儲空間可用。運行時間最多幾分鍾,運行時間為 秒就不需要進一步優化。 程序設計與實現概要: 應用位圖或位向量表示集合。可用一個 位長的字符串來表示一個所有元素都小於 的 ...
2012-08-14 14:06 1 8146 推薦指數:
分析:那么我們來看一個具體的例子,假設我們要對0-7內的5個元素(4,7,2,5,3)排序(這里假設這些元素沒有重復)。那么我們就可以采用Bit-map的方法來達到排序的目的。要表示8個數,我們就只需要8個Bit(1Bytes),首先我們開辟1Byte的空間,將這些空間的所有Bit位都置 ...
二分查找是《編程珠璣》作者很喜愛的一個話題,之前我曾經專門寫了一篇博文:如何寫出正確的二分查找?——利用循環不變式理解二分查找及其變體的正確性以及構造方式,在這里將換幾個角度,繼續探討二分查找的相關內容,以及與它聯系緊密的分治法和排序思想。 目錄 二分思想和分治法 ...
寫在前面的 2012年3月25日買下《編程珠璣》,很期待但不知道它能給我帶來什么! 編程珠璣,字字珠璣。但是翻譯有點拗口,有時候整句話讀下來都不知道在講什么,多少有點掩飾了珠璣的魅力,真懷疑是不是直接有道翻譯了。 位圖數據結構法 在“開篇”的里,講述了排序的一個問題,大意就是,對一個“最多 ...
位向量/位圖是一個很有用的數據結構,在充分利用小空間存儲大量數據方面非常具有優勢,Linux內核中很多地方都是用了位圖。同時,它不但基礎,而且用到了很多編程語言的知識,以及對細節的把握,常常作為面試題出現。這里將要介紹它的實現、操作、應用。 與位圖(bitmap)比,我更傾向於用位向量 ...
題目:對2G的數據量進行排序,這是基本要求。 數據:1、每個數據不大於8億;2、數據類型位int;3、每個數據最多重復一次。 內存:最多用200M的內存進行操作。 我聽過很多種類似問題的解法,有的是內存多次利用,有的用到了外存,我覺得這兩種做法都不是比較好的思想,太慢。由於這個題目看起 ...
本書第一章提出了一個看似簡單的問題,有最多1000萬條不同的整型數據存在於硬盤的文件中,如何在1M內存的情況下對其進行盡可能快的排序。 每個數字用4byte,1M即可存儲250 000個數據,顯然,只要每次對250 000個數據排序,寫入到文件中即可,重復40次。 那么如何選出每次遍歷 ...
1,位圖法介紹 位圖的基本概念是用一個位(bit)來標記某個數據的存放狀態,由於采用了位為單位來存放數據,所以節省了大量的空間。舉個具體的例子,在Java中一般一個int數字要占用32位,如果能用一位就表示這個數,就可以縮減大量的存儲空間。一般把這種方法稱為位圖法,即Bitmap ...
Select 算法 I 編程珠璣(續)介紹的 Quickselect 算法 選擇 N 個元素中的第 K 小(大)值,是日常場景中常見的問題,也是經典的算法問題. 選取 N 個元素的數組的中的第 K 小(大)值,最簡單的想法是將數組排序后直接選取. 那么這種方法的時間復雜度是O(N log N ...