编程珠玑读书笔记之磁盘文件排序
輸入:
所輸入的是一個文件,至多包含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: 編程珠璣,算法,排序,磁盤排序轉載于:https://www.cnblogs.com/jcleung/archive/2011/05/12/2044069.html
總結
以上是生活随笔為你收集整理的编程珠玑读书笔记之磁盘文件排序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全球最受欢迎车型公布:特斯拉这车型夺魁
- 下一篇: 任正非流言终结!陈春花向华为道歉:我们都