第十一章 外部排序
第十一章外部排序
一、內容提要
1、外部排序指待排序檔案較大,記憶體一次存放不下,尚需存放在外部介質的檔案的排序。
2、為減少平衡歸併中外存讀寫次數所採取的方法:增大歸併路數和減少歸併段個數。
3、利用敗者樹增大歸併路數。
4、利用置換—選擇排序增大歸併段長度來減少歸併段個數。
5、由長度不等的歸併段,進行多路平衡歸併,需要構造最佳歸併樹。
6、磁帶的多步歸併排序。
二、學習要點
1、熟悉外部排序的兩個階段,歸併過程。
2、掌握外部排序過程中進行外存讀
/寫次數的計算方法。
3、「勝者樹」增大歸併路數不能減少外存讀寫次數,」敗者樹」可以勝任。掌握敗者樹建立及歸併演算法。
4、熟悉置換—選擇排序的過程,理解它能得到平均長度為工作區兩倍的初始歸併段的道理。
5、熟練掌握最佳歸併樹的構造方法,及該過程中對外存讀
/寫次數的計算方法。
6、了解磁帶多步歸併的特點,熟悉歸併過程及設定虛假的方法,及歸併過程所需外存讀
/寫次數的計算方法。
三、習題解析
1.「敗者樹「中「敗者「者指的是什麼
?若利用敗者樹求
k的個數中的最大者,若在比較中有
a>b
,誰是敗者。
【解答】
所謂」敗者樹」,就是在比賽(選擇)樹中,每個雙親結點存放兩個子女結點中的」敗者」,而讓「勝者」參加高一層的比賽。在根結點之上,再加乙個結點
o,表示全域性比賽獲勝者。
這裡用敗者樹求
k個數中最大者,若
a>b, a
是勝者,
b小則是敗者。
2.」敗者樹」與「堆」有何區別。
【解答】」敗者樹」是由參加比賽的
n個元素作葉子結點所形成的完全二叉樹。而」堆」則是
n個元素的序列,且具有如下性質:
ki<=k2i
或:ki>=k2i 且
ki<=k2i+1
且ki>=k2i+1 (0<=i<=n div 2
) 由於堆的這個性質中,下標
i與2i及
2i+1
的關係,恰與完全二叉樹第
i個結點和它的子樹結點序號關係完全一致,故堆可看成是含
n個結點的完全二叉樹。
3.設有12
個歸併段,其長度分別為30,
44,8,
6,3,
20,60,
18,9,
62,68,
85。現欲作
4路外部歸併排序,試華出表示歸併過程的最佳歸併樹,並計算
wpl。
【解答】
因(12-1
)mod (4-1)=2
,所以的第一次歸併路數為
2+1=3
路,所以最佳歸併樹如下:
____________( 413) __________ ╱
╱ ╲╲
______(64) _____ (68) (85) ______(196)_____
╱╱ ╲╲ ╱ ╱ ╲ ╲
(9 ) (17) (18) ( 20) (30) (44) ( 60) (62)
╱| ╲ (3) (6) (8)
wpl=(3+6+8)*3+(9+18+20+30+44+60+62)*2+
(68+85)*1
=51+243*2+153*1
=690
《程式設計珠璣》第十一章 排序
好久沒寫部落格了,最近挺忙的,忙的不可開交,可細想一下,又都是在瞎忙,渾渾噩噩的,不知自己到底忙什麼,又到底有什麼收穫。捫心自問,自己浪費了不少時間。不管怎樣,自己要把握好,有志者就要時時刻刻約束自己的行為,我要這樣嚴格要求自己,不管別人怎麼看待,也不管自己有多痛苦,堅持下去。當然,寫部落格也是一樣...
modern c design 第十一章
本章介紹了經常遇到的雙分派的一種泛型解決方案。c 在語法上實現了單分派,即虛函式,通過動態機制選擇相應的函式。雙分派是形如fun object1 a,object2 b 根據a和b的實際型別動態自動分派乙個處理函式。最容易想到的方案,蠻幹法 寫一大堆過載函式.不過這種方法會有很強的依賴性。也提供了一...
第十一章3
第十一章 一 滾動元件 awt中的滾動元件包括scrollbar 滾動條 和滾動面板 scrollpane 兩種。1 滾動條scrollbar 在指定的取值範圍內快速選取某一值的功能。i.構造方法 public scrollbar int orientation,int value,int visi...