編程珠璣讀書筆記之磁碟檔案排序

來源:互聯網
上載者:User

輸入:

所輸入的是一個檔案,至多包含n個正整數,每個正整數都要小於n,這是 n = 10^7。如果輸入時某個整數出現了兩次,就會產生一個致命的錯誤。這些整數與其他任何資料都不關聯。

輸出:

以增序形式輸出的經過排序的整數列表。

基本思想:使用一個具有一千萬位的字串表示該檔案,在該字串中,若且唯若整數i在該檔案中時,第i個位才開啟(設為1)。解決該問題的過程可以分為三個自然階段。第一個階段關閉所有的位,將集合初始化為空白集。第二個階段讀取檔案中的每個整數,並開啟相應的位,建立該集合。第三個階段檢查每個位,如果某個位是1,就寫出相應的整數,從而建立已排序的輸出檔案。如果n是向量中位的數目(在本例中是10000000),該程式可以用偽碼如下表示:

/*phase 1: initialize set to empty */
for i = [0, n]
    bit[i] = 0;
/*phase 2: insert present elements into the set */
for each i in the input file
    bit[i] = 1;
/*phase 3: write sorted output */
for i = [0,n)
    if bit[i] == 1
         write i on the output file

原則:

位元影像資料結構 此資料結構代表了有限域中的稠集(dense set),每一個元素至少出現一次,沒有其他的資料和元素相關聯。即使不滯這些條件(例如存在多重元素或額外資料時),也可以使用有限域中的鍵作為表索引(表具有更複雜的條目)

多通道(Multiple-Pass)演算法 這些演算法具有多個輸入資料的通道,每讀一次就向完成前進一步。

時間和空間的權衡 二者不可偏廢。

簡單的設計 與複雜程式相比,簡單程式通常要更加可靠、安全、健壯和有效些,構建和維護時也要更加容易一些。

Technorati Tags: 編程珠璣,演算法,排序,磁碟排序

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.