1.影響內部排序時間效率的是移動和比較的次數,影響外部排序時間效率的是i/o次數。
2.歸併的躺數越少,讀寫磁碟的次數就越少,歸併的躺數=
第一:k為歸併路數,增大k,可以降低躺數,減少io次數
第二:r為初始歸併段的個數,減少r,可以降低躺數,減少io次數
可是歸併路數一旦增大,內部比較的壓力就會變大,內部比較效率降低。那麼,增大歸併路數而提高的時間效率就被內部排序給抵消了。那怎麼辦呢?有沒有可能使得內部排序效率不受歸併路數增加的影響呢?這個辦法就是「敗者樹」,用敗者樹的方法挑選出最小值。
m路歸併,不使用敗者樹,要比較m-1次,使用敗者樹,只需要比較log2m次,總比較次數為(n-1)log2r,與m無關(總次數有乙個計算公式,剛好約掉了log2m,這裡請讀者閱讀書籍)
所以,內部歸併的比較次數與歸併路數無關,只要記憶體空間允許,增大歸併路數將有效提高排序速度,(單歸併路數並不是越大越好)。
將記憶體緩衝區的個數增加,一次便可以排序更多的資料,使得初始歸併段更長,從而初始規定段的個數更小
選擇-置換排序」。
選擇-置換的詳細過程不介紹,一定要記住,選擇-置換排序是用來生成初始歸併段的,而且初始歸併段的長度並不相同。使用選擇-置換的方法又會帶來另乙個問題,分成了長度各不相同的歸併段,那如何安排這些歸併段歸併的次序呢?這就引入了最佳歸併樹的概念,其實就是將哈夫曼樹的思想推廣到m叉樹的情形,最佳歸併樹有最短的帶權路徑長度,代表著歸併過程中讀數的次數,那麼總的i/o次數就是兩倍wpl。
需要注意的是,在構造最佳歸併樹的時候,為了構成嚴格的m叉樹,有的時候需要新增權值為0的虛結點。
總結:
敗者樹:從k個歸併路中挑選最小值的方法選擇置換排序:構造更長的初始歸併段(長度各不相同),減少歸併段的數量
最佳歸併樹:解決的問題:在選擇置換排序下,各個歸併段的長度不相同,每次挑選哪兩個段進行歸併,能夠使得讀寫磁碟的次數更少呢?
資料結構 外部排序
之前有寫過內部排序,這次看到嚴蔚敏老師的書上還介紹了外部排序,就一起記錄一下,以便以後可以看看 外部排序是指資料量很大,一下子不能將所有的資料放入記憶體裡面進行排序,只能一部分一部分從硬碟中讀取資料,送入內部排序,將內部排序的結果取出,換下一批資料進行排序。對於外部排序的提高的核心問題是 減少外部儲...
資料結構 排序 內排序總結
1.時間複雜度總結 n2 直接插入排序,氣泡排序,簡單選擇排序 這三種裡面直接插入排序好一點 nlogn 快速排序,堆排序,歸併排序 n 基數排序 其他 n2 2.時間效能與初始序列無關 口訣 一堆烏龜選 堆排序,歸併排序,基本選擇排序,基數排序 3.空間效能 快速排序 logn 歸併排序 n 基數...
資料結構排序 總結
一 排序的基本概念 假設含有n個記錄的序列為,其相應的關鍵字為,需確定1,2,3 n的一種排列p1,p2,pn使其相應的關鍵字滿足kp1 kp2 kp3 kpn非遞減 或非遞增 關係,及時的序列稱為乙個按關鍵字有序的序列,這樣的操作就稱為排序。二 排序的分類 1 內排序和外排序 按照排序過程中涉及的...