算法與數(shù)據(jù)結(jié)構(gòu)課件-DSC11_第1頁
算法與數(shù)據(jù)結(jié)構(gòu)課件-DSC11_第2頁
算法與數(shù)據(jù)結(jié)構(gòu)課件-DSC11_第3頁
算法與數(shù)據(jù)結(jié)構(gòu)課件-DSC11_第4頁
算法與數(shù)據(jù)結(jié)構(gòu)課件-DSC11_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第十一章.外部排序(Chapter11.ExternalSorting)待排序列記錄數(shù)量太大,不能全部存放在計算機(jī)隨機(jī)存儲器中,排序過程中需對計算機(jī)外存進(jìn)行訪問,這種排序過程稱為外部排序?!?1.1外存信息的存取一、磁帶信息的存?。?/p>

磁帶是在一條塑料薄膜上涂有磁性材料用以記錄數(shù)據(jù)的存儲介質(zhì)。其記錄組之間有一定的空隙IRG(InterRecordGap),它不是連續(xù)運轉(zhuǎn)的設(shè)備,讀寫二、磁盤信息的存?。?/p>

磁盤是在一片塑料薄膜上涂有磁性材料用以記錄數(shù)據(jù)的存儲介質(zhì)。它分成多個磁道(柱面),每個磁道又分為多個扇區(qū),多個磁盤組成的磁盤組還涉及到盤片號(磁頭號),磁盤繞軸高速旋轉(zhuǎn),讀寫頭則沿其一條半徑作直線運動以尋道。它也不是信息只能在運行穩(wěn)定時進(jìn)行,且找到要讀寫的記錄也需要一定的繞帶時間,因此,在磁帶上讀寫信息所需的時間由兩部分組成:TI/O=td+ntw,其中td

為延遲時間,即讀寫磁頭到達(dá)信息所在物理塊起始位置所需時間,tw

為傳輸一個記錄的時間。磁帶是一種順序存儲設(shè)備?!?1.2外部排序的方法

總體要用歸并排序,亦即將待排序列分成若干子序列分別進(jìn)入內(nèi)存排成有序序列(初始?xì)w并段),再用歸并排序?qū)⑺袣w并段排序成一個有序序列。連續(xù)運轉(zhuǎn)的設(shè)備,讀寫信息只能在旋轉(zhuǎn)穩(wěn)定時進(jìn)行,且找到要讀寫的記錄也需要一定的尋道、尋扇區(qū)時間,因此,在磁盤上讀寫信息所需的時間由三部分組成:TI/O=tseek+tla+ntw,其中tseek

為尋道時間(seektime),tla

為尋扇區(qū)時間(latencytimetime),tw

為傳輸時間(transmissiontime)。磁盤是一種隨機(jī)存儲設(shè)備。

一般情況下,外部排序所需的總時間由三部分構(gòu)成:內(nèi)部排序(產(chǎn)生初始?xì)w并段)所需時間(m*tIS

)、外存信息讀寫時間(d*tIO

)、內(nèi)部歸并所需時間(s*utmg

)。其中tIS

是為得到一個初始?xì)w并段進(jìn)行內(nèi)部排序所序的平均時間,tIO

是進(jìn)行一次外存讀寫的平均時間,utmg

是對u個記錄進(jìn)行內(nèi)部歸并所需的時間,m為初始?xì)w并段的個數(shù),s為歸并的趟數(shù),d為總的讀寫次數(shù)。但由于訪問外存儲器的時間開銷太大,即tIO

遠(yuǎn)遠(yuǎn)大于tmg,因此,要提高外部排序速度,就必須減少訪問外存的次數(shù)。

對同一待排序列而言,外部排序訪問外存的總次數(shù)d與歸并的趟數(shù)s成正比,而對m

個初始?xì)w并段進(jìn)行k路平衡歸并所需的趟數(shù)s=logkm,因此,增加k或減少m均能減少s。

利用敗者樹(treeofloser)可解決這一問題:類似于錦標(biāo)賽排序的思想,在進(jìn)行k路平衡歸并時,將相互比較過的關(guān)鍵字值較大的初始?xì)w并段號(敗者)留在樹結(jié)點中,將關(guān)鍵字值較小的初始?xì)w并段號(勝者)上傳,直到找到最終的勝者(最小值的段號);將其歸并后,其下一記錄將替換它參加新的一輪比賽以找到新的最小值段號;反復(fù)此過程,直至全部k個初始?xì)w并段合并成一個有序序列為止。此時的歸并時間為log2m(n-1)tmg,與k無關(guān),但k也并非越大越好?!?1.3多路平衡歸并的實現(xiàn)若單純增加k以減少s,將會增加內(nèi)部歸并的時間utmg

,這將抵銷d隨s減少而得到的效益,如何解決這一矛盾呢?516128305233416283112141781015303856b3b4b0b1b2[0][1][2][3][4]

初始?xì)w并段

0b55555516045165033002830801125058135232334482316316124128018101015291030210120110151529885-路平衡歸并的敗者樹:

例:§11.4置換-選擇排序…

利用置換-選擇排序(replacement-selectionsort)可以達(dá)到這個目的(也用敗者樹實現(xiàn)):

置換-選擇排序是在選擇排序的基礎(chǔ)上,當(dāng)最小關(guān)鍵字記錄被選出后,它空出的位置補充進(jìn)一個新的記錄,以后再求最小記錄時,不能選擇比剛才的最小記錄關(guān)鍵字小的記錄,只能從大于它的記錄中尋找新的最小關(guān)鍵字記錄。反復(fù)此過程,直至工作區(qū)中所有記錄的關(guān)鍵字均比剛出去的最小記錄的關(guān)鍵字小為止,此時得到的就是一個完整的初始?xì)w并段。

除了增加k可以減小s外,減小m也是減小s的另一有效途徑。但減小m就意味著要增加初始?xì)w并段長度,這又受到計算機(jī)內(nèi)存大小的制約,又該如何解決這個問題呢?設(shè)計算機(jī)工作區(qū)大小為W=5,試給出下面待排序列利用置換-選擇排序得到的初始?xì)w并段:{23,45,12,5,2,6,27,39,16,44,55,24,1,13,78,123,4,21,66,168,35,3,18,33,96,51,49,72,22,41}。

例:初始?xì)w并段1為:2,5,6,12,16,23,27,39,44,45,55,78,123初始?xì)w并段2為:1,4,13,21,24,35,66,96,168初始?xì)w并段3為:3,18,22,33,41,49,51,72可見,利用置換-選擇排序所得到的初始?xì)w并段數(shù)明顯比直接用選擇排序少得多。如上面的例子,直接用選擇排序要生成六個初始?xì)w并段,但利用置換-選擇排序后,只得到了三個歸并段。

那么,利用置換-選擇排序到底能使初始?xì)w并段的長度增加多少呢?

E.F.Moore用類比的辦法解決了這個問題:設(shè)天上正勻速地下著大雪,有一臺掃雪機(jī)也勻速地沿著一個環(huán)形跑道在掃雪,當(dāng)達(dá)到某一平衡點時,單位時間內(nèi)掃雪機(jī)掃去的雪和天上下的雪的量正好相等,跑道上的積雪量保持不變,則積雪形成了一個斜面:掃雪機(jī)前面的積雪厚度最大,掃雪機(jī)后面的積雪厚度為零。此時跑道上的積雪量就相當(dāng)于計算機(jī)的工作區(qū)大小W,而掃雪機(jī)工作一圈所掃去的積雪量就相當(dāng)于初始?xì)w并段的長度——2W。生成初始?xì)w并段的時間(不考慮輸入輸出)為O(nlogW)?!?1.5緩沖區(qū)及并行操作設(shè)定相應(yīng)的輸入輸出緩沖區(qū),讓輸入、輸出和內(nèi)部歸并三種操作同時進(jìn)行(并行操作),也能提高總的外部排序時間。但增加緩沖區(qū)數(shù)目,必將減小工作區(qū)大小W,又使得初始?xì)w并段長度減小從而增加排序總時間。因此,外部排序總的時間與歸并排序路數(shù)k的選擇、緩沖區(qū)大小的設(shè)置以及各種外設(shè)參數(shù)的設(shè)置等有關(guān),實際應(yīng)用時要綜合考慮各種因數(shù)?!?1.6最佳歸并樹

用置換-選擇排序得到的初始?xì)w并段長度各不相同,那應(yīng)如何進(jìn)行k路平衡歸并呢?這實際上是建立k叉霍夫曼樹的問題:當(dāng)初始?xì)w并段總數(shù)不足((m-1)MOD(k-1)≠0)時,需附加k-(m-1)MOD(k-1)-1個長度為零的虛段,亦即第一次歸并時只對(m-1)MOD(k-1)+1個初始?xì)w并段歸并。建立k叉霍夫曼樹每次仍是選擇記錄數(shù)相對少的初始?xì)w并段先進(jìn)行歸并。最佳歸并樹不適合磁帶歸并排序。作業(yè)34.

已知某文件經(jīng)過置換-選擇排序之后,得到長度分別為47,9,39,18,4,12,23和7的八個初始?xì)w并段。試為3-路平衡歸并設(shè)計一個讀寫外存次數(shù)最少的歸并方案,并求出總的讀寫外存次數(shù)。§11.7磁帶歸并排序前面所介紹的各種技術(shù)除最佳歸并樹外均適合于磁帶歸并排序,但由于磁帶是順序存取設(shè)備,在實現(xiàn)外部排序時,有些特殊的問題需考慮。一、平衡歸并

實現(xiàn)k-路平衡歸并,需要2k臺磁帶機(jī),其中k臺用于輸入,k臺用于輸出,待一趟歸并完后,輸入磁帶機(jī)改為輸出磁帶機(jī),輸出磁帶機(jī)也改為輸入磁帶機(jī),再進(jìn)行下一趟歸并;反復(fù)此過程,直至全部記錄歸并為一段有序序列。二、多步歸并

仔細(xì)分析一下磁帶k-路平衡歸并可以發(fā)現(xiàn),其實只執(zhí)行一趟k-路歸并并不需要2k臺磁帶機(jī),只需k+1臺磁帶機(jī)即可,多余的磁帶機(jī)目的是為了下一趟歸并。當(dāng)然,只用k+1臺磁帶機(jī)也能實現(xiàn)k-路平衡歸并,即在每趟歸并完后,再將各輸出歸并段(在同一磁帶機(jī)上)分配到k臺磁帶機(jī)上用于下一趟歸并。但這需要花費很多時間,有沒有更好的辦法呢?

多步歸并排序(polyphasemerging

sorting)能解決這個矛盾。與平衡歸并不同,一趟多步歸并不是文件中的全部記錄都參與歸并。設(shè)有4臺磁帶機(jī)和17個初始?xì)w并段,采用3-路多步歸并排序,其歸并過程為:

例:

3-路多步歸并效率比3-路平衡歸并差,但比2-路平衡歸并強。那么,初始?xì)w并段又是如何分配在各磁帶機(jī)上的呢?利用k-階廣義費波拉契序列,當(dāng)初始?xì)w并段總數(shù)為某一費波拉契數(shù)(不足用虛段填充)時,各磁帶機(jī)上分布的初始?xì)w并段數(shù)由下式給出:t1(k)

=fj-1(k)+fj-2(k)+fj-3(k)+…+fj-k

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論