外排序時間估計和趟數計算的理解

學習一個算法題過程中涉及到外排序,就把外排序的知識複習一遍。複習中對趟數計算,我似乎覺得應該很好理解,但又好像不能透徹的理解,就問自己能不能給出一個清晰的證明。嘗試了進一步的理解。

I估計外排序的時間。

某文件共10000個記錄,設每個物理塊可以容納200個記錄,內存緩衝區可以容納5個物理塊

1)經過10次內排序後得到10個初始歸併段R1~R10

2)採用兩路歸併,需四趟可以得到排好序的文件

R1  R2 R3  R4  R5 R6  R7  R8 R9  R10

  R1’     R2’      R3’     R4’     R5’

       R1’’             R2’’         R3’’

               R1’’’                 R2’’’

                         R1’’’’

是得到一個初始歸併段進行內部排序所需時間的均值;進行一次讀/寫時間的均值;平均歸併一個元素所需的時間。

10個初始段的內部排序時間是10

總的I/O時間的估計方法。

  計算產生R1的I/O時間。爲得到R1,R1包含的5個物理塊都要被讀入內存,然後再寫到硬盤,所以時間是10。所以得到十個初始歸併段的I/O時間是100

  計算產生R1’的時間。爲得到R1’,R1和R2的所有塊都有被陸續讀入內存,並陸續寫入硬盤,所以I/O時間是(5+5)*2=20。所以得到R1’到R5’的總的時間是100

  計算產生R1’’的時間。爲得到R1’’,R1’和R2’的所以塊都要被陸續讀入內存,並陸續寫入硬盤,所以I/O時間是(10+10)*2=40,所以得到R1’’和R2’’的總的I/O時間是80

  類似,得到R1’’’的I/O時間是(20+20)*2=80

  類似,得到R1’’’’的I/O時間是(40+10)*2=100

所以,總的I/O時間是(100+100+80+80+100)=460

總的歸併時間。(10000+8000+8000+10000)=46000

 

II.m個初始歸併段,k路歸併的趟數s=

結論1:如果一個k路歸併段集合的總歸併段數是,則歸併趟數是s。

證明:

進行第一趟歸併,歸併段總數是

進行第二趟歸併,歸併段總數是

… …

進行第s-1趟歸併,歸併段總數是k。

進行第s趟歸併,得到一個有序歸併段。

所以歸併趟數是s。結論得到證明。

 

結論2:所有k路歸併段集合的總歸併段數在區間的歸併段集合進行k路歸併時有相同的歸併趟數2。

證明:假設歸併集的歸併段總數是。根據上一個結論,知道歸併趟數是2.

假設一個歸併段集合的歸併段總數是m,。則有,1。進行一次歸併後歸併集合的歸併段總數是。進行第2次歸併後,就得到一個有序的歸併段。結論得到證明。

 

結論3:所有k路歸併集合的總歸併段數在區間(r爲正整數)的歸併段集合進行k路歸併時有相同的歸併趟數r+1。

證明:

i. r=1時,由上面的結論得到證明。

ii. 假設r=n是結論成立,即某個歸併段集合總數在,進行k路歸併時趟數爲n+1.

iii. 證明r=n+1時結論成立。假設一個歸併集合的歸併段總數是。根據上面的結論知道,這個集合的歸併趟數是n+2。

假設一個歸併段集合總數爲,則有。進行一次歸併得到新集合總數=a,並且當=a時,。因爲,所以新集合的歸併趟數爲n+1。從而得出原歸併段集合的趟數爲n+2。r=n+1時,結論得到證明。

最終結論得到證明。

 

結論4:歸併集合有m個初始歸併段,k路歸併的趟數s=

證明:如果m是k的整數次冪。即存在正整數r,,根據結論1,趟數

如果m不是k的整數次冪。令。則。根據結論3,歸併趟數s=。結論得到證明。


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