外部排序分析

       當對數據記錄量巨大的數據文件進行排序時,由於受到內存容量的限制,無法將所有數據記錄一次全部讀入到內存進行。排序過程中需要多次進行內、外存之間的數據交換。利用外存對數據文件進行排序稱爲外部排序。
       外部排序最基本的方法是歸併。這種方法是由兩個相對獨立的階段組成:
① 按內存(緩衝區)的大小,將n個記錄的數據文件分成若干個長度爲l的段或子文件,依次讀入內存並選擇有效的內部排序方法進行排序;然後將排好序的有序子文件重新寫入到外存。子文件稱爲歸併段或順串。
② 採用歸併的辦法對歸併段進行逐趟歸併,使歸併段的長度逐漸增大,直到最後合併成只有一個歸併段的文件—排好序的文件。
      
1 外部排序的簡單方法
    歸併排序有多種方法,最簡單的就是2-路歸併。
    設有一個磁盤上的數據文件,共有100,000個記錄(A1, A2,…,A100000),頁塊長爲200個記錄,供排序使用的緩衝區可提供容納1000個記錄的空間,現要對該文件進行排序,排序過程可按如下步驟進行:
        第一步:每次將5個頁塊(1000個記錄)由外存讀到內存,進行內排序,整個文件共得到10個初始順串R1~R10 (每一個順串佔5個頁塊),然後把它們寫回到磁盤上去。
       第二步:然後兩兩歸併,直到成爲一個有序文件爲止。
      
由圖可知,每趟歸併由m個歸併段得到┌m/2┐個歸併段。
2 外排序的時間分析
         外排序的時間消耗比內排序大得多,原因是:
●  外排序的數據量(記錄)一般很大;
●  外排序涉及到內、外存之間的數據交換操作;
●  外存的操作速度遠遠比內存中的操作慢。
外排序的總時間由三部分組成:
外排序的時間=產生初始歸併段的時間(內排序)m×tis
                          +I/O操作的時間d×tio
                          +內部歸併的時間s×utmg
其中:
m:初始歸併段數目;tis:得到一個歸併段的內排序時間;
d:總的讀、寫次數;tio:一次讀、寫的時間;
s:歸併的趟數;utmg:對u個記錄進行一趟內部歸併排序的時間。
        一般地,tio>>tis,tio>>tmg,tio而取決於所用外存,因此,影響外排序效率的主要原因是內、外存之間數據交換(讀、寫外存)。提高效率的主要方法(途徑)有:
●  進行多路歸併,減少文件歸併的趟數;
●  增加歸併段的長度,減少初始歸併的數目;
●  根據不同歸併段的長度,採取最佳歸併方案。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章