第七章 計算複雜度概論:排序問題

81
第第第 第第第第第第第 第第第第 7.1 第第第第第 7.2 第第第第第第第第第 7.3 第第第第第第第第 第第第第第第第第第第 7.4 第第第第第第 7.5 第第第第第第 7.6 第第第第 7.6.1 第第第第第第第第第第第 7.6.2 第第第第第第

Upload: denton-mcdowell

Post on 30-Dec-2015

85 views

Category:

Documents


0 download

DESCRIPTION

第七章 計算複雜度概論:排序問題. 7.1 計算複雜度 7.2 插入排序與選擇排序 7.3 每次比較至多移除一個導致之演算法的下限 7.4 再探合併排序 7.5 再探快速排序 7.6 堆積排序 7.6.1 堆積與基本的堆積副程式 7.6.2 實作堆積排序. 7.7 合併排序、快速排序、堆積排序 的比較 7.8 僅利用 Key 的比較進行排序的下限 7.8.1 提供排序演算法使用的 決策樹 (decision tree) 7.8.2 最差情況下的下限 7.8.3 平均情況下的下限 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第七章 計算複雜度概論:排序問題

第七章 計算複雜度概論:排序問題 7.1 計算複雜度 7.2 插入排序與選擇排序 7.3 每次比較至多移除一個導致之演算法的下

限 7.4 再探合併排序 7.5 再探快速排序 7.6 堆積排序 7.6.1 堆積與基本的堆積副程式 7.6.2 實作堆積排序

Page 2: 第七章 計算複雜度概論:排序問題

7.7 合併排序、快速排序、堆積排序 的比較 7.8 僅利用 Key 的比較進行排序的下限 7.8.1 提供排序演算法使用的 決策樹 (decision tree)

7.8.2 最差情況下的下限 7.8.3 平均情況下的下限 7.9 分堆排序 ( 基數排序法 , Radix Sort)

Page 3: 第七章 計算複雜度概論:排序問題

7.1 計算複雜度

計算複雜度:研究解決一個給定問題之所有可能演算法的領域,而這個領域與演算法的設計及分析關聯性很高。

排序工作:重排紀錄,使得紀錄會根據Key 值的大小依序排好。

Page 4: 第七章 計算複雜度概論:排序問題

原地置換排序 (in-place sort)

Page 5: 第七章 計算複雜度概論:排序問題

7.2 插入排序與選擇排序

Page 6: 第七章 計算複雜度概論:排序問題

演算法 7.1 插入排序 (Insertion Sort)

Page 7: 第七章 計算複雜度概論:排序問題

分析演算法 7.1 最差情況下,以 key 比較次數為準的時間複雜度分析 ( 插入排序 )

基本運算:比較 S[ j ] 與 x 輸入大小: n ,被拿來排序的 key 之個

Page 8: 第七章 計算複雜度概論:排序問題

分析演算法 7.1平均情況下,以 key 比較次數為準的時間複雜度分析 ( 插入排序 )

Page 9: 第七章 計算複雜度概論:排序問題
Page 10: 第七章 計算複雜度概論:排序問題

分析演算法 7.1 額外空間的使用情況 ( 插入排序 )

唯一會隨著 n 的增加而增加的使用空間的是輸入陣列 S 的大小。因此,該演算法屬於原地置換排序,而額外使用空間的複雜度在 中

Page 11: 第七章 計算複雜度概論:排序問題

表 7.1 交換排序、插入排序、 與選擇排序的分析摘要

Page 12: 第七章 計算複雜度概論:排序問題

演算法 7.2 選擇排序 (Selection Sort)

Page 13: 第七章 計算複雜度概論:排序問題

7.3 每次比較至多移除 一個倒置之演算法的下限

Page 14: 第七章 計算複雜度概論:排序問題

定理 7.1

Page 15: 第七章 計算複雜度概論:排序問題

7.4 再探合併排序

Page 16: 第七章 計算複雜度概論:排序問題

圖 7.2 對一個順序顛倒的執入進行合併排序

Page 17: 第七章 計算複雜度概論:排序問題

分析演算法 7.2 額外空間的使用情況 ( 合併排序 2)

Page 18: 第七章 計算複雜度概論:排序問題

演算法 7.3 合併排序 3( 動態規劃版 )

Page 19: 第七章 計算複雜度概論:排序問題

演算法 7.4 合併排序 4( 鏈結版 )

Page 20: 第七章 計算複雜度概論:排序問題
Page 21: 第七章 計算複雜度概論:排序問題
Page 22: 第七章 計算複雜度概論:排序問題

分析演算法 7.4 額外空間的使用情況分析 ( 合併排序4)

在一般的情況下,使用的額外空間在 個鏈結中。“在 個鏈結中”代表鏈結的個數在 中

Page 23: 第七章 計算複雜度概論:排序問題

7.5 再探快速排序

Page 24: 第七章 計算複雜度概論:排序問題

額外空間的使用情況分析 ( 改良式快速排序 )

在這個版本中,最差情況發生在當 partition 每次都把陣列切成一半的時候,造成堆疊的深度約為 lgn 。因此最差的空間使用情況為

Page 25: 第七章 計算複雜度概論:排序問題

7.6 堆積排序

7.6.1

堆積與基本的堆積副程式

Page 26: 第七章 計算複雜度概論:排序問題

完整二元樹 (complete binary tree)

所有內部節點都有兩個子節點 所有 leaf 節點的深度均為 d

Page 27: 第七章 計算複雜度概論:排序問題

本質完整二元樹 (essentially complete binary tree)

如果從根節點看到 d-1 層是一顆完整二元樹

在第 d 層的節點盡量靠左邊

Page 28: 第七章 計算複雜度概論:排序問題

堆積 (heap)

屬於本質完整二元樹 儲存於節點中的值均來自於一個有序集

合 節點的值大於或等於其子節點的值。這

點稱作堆積特性 (heap property)

Page 29: 第七章 計算複雜度概論:排序問題
Page 30: 第七章 計算複雜度概論:排序問題

圖 7.6

Page 31: 第七章 計算複雜度概論:排序問題

圖 7.6 的高階虛擬碼

Page 32: 第七章 計算複雜度概論:排序問題

移除位於根節點的 key 並回覆堆積特性函式之高階虛擬碼

Page 33: 第七章 計算複雜度概論:排序問題

給定一個具有 n 個 key 的堆積,負責將排序好的序列放進陣列 s 函式的高階虛擬式

Page 34: 第七章 計算複雜度概論:排序問題

圖 7.7

Page 35: 第七章 計算複雜度概論:排序問題

圖 7.7 的高階虛擬碼

Page 36: 第七章 計算複雜度概論:排序問題

堆積排序 (Heapsort) 的高階虛擬碼

Page 37: 第七章 計算複雜度概論:排序問題

7.6.2 實作堆積排序

Page 38: 第七章 計算複雜度概論:排序問題

堆積 (heap) 的資料結構

在一般的情況下,使用的額外空間在 個鏈結中。“在 個鏈結中”代

表鏈結的個數在 中

Page 39: 第七章 計算複雜度概論:排序問題
Page 40: 第七章 計算複雜度概論:排序問題
Page 41: 第七章 計算複雜度概論:排序問題
Page 42: 第七章 計算複雜度概論:排序問題

演算法 7.5 堆積排序

Page 43: 第七章 計算複雜度概論:排序問題

分析演算法 7.5 以 key 的比較次數 來看,最差情況的時間複雜度分析

基本運算:在副程式 siftdown 中, key的比較次數

輸入大小: n ,將被排序 key 的數目

Page 44: 第七章 計算複雜度概論:排序問題

分析 Makeheap

Page 45: 第七章 計算複雜度概論:排序問題
Page 46: 第七章 計算複雜度概論:排序問題
Page 47: 第七章 計算複雜度概論:排序問題

分析 removekeys

Page 48: 第七章 計算複雜度概論:排序問題

圖 7.10

Page 49: 第七章 計算複雜度概論:排序問題

前兩個分析的總結

Page 50: 第七章 計算複雜度概論:排序問題

堆積排序的平均情況時間複雜度

Page 51: 第七章 計算複雜度概論:排序問題

分析演算法 7.5 額外空間的使用情況分析 ( 堆積排序 )

堆積排序是一種原地置換排序,意味著他使用的額外空間在 中

Page 52: 第七章 計算複雜度概論:排序問題

7.7 合併排序、快速排序、 堆積排序的比較

Page 53: 第七章 計算複雜度概論:排序問題

表 7.2

Page 54: 第七章 計算複雜度概論:排序問題

7.8 僅利用 key 的比較 進行排序的下限

Page 55: 第七章 計算複雜度概論:排序問題

7.8.1 提供排序演算法使用的 決策樹 (decision tree)

Page 56: 第七章 計算複雜度概論:排序問題

圖 7.11

Page 57: 第七章 計算複雜度概論:排序問題

圖 7.12

Page 58: 第七章 計算複雜度概論:排序問題
Page 59: 第七章 計算複雜度概論:排序問題

7.8.2 最差情況下的下限

Page 60: 第七章 計算複雜度概論:排序問題
Page 61: 第七章 計算複雜度概論:排序問題
Page 62: 第七章 計算複雜度概論:排序問題

定理 7.2 任一僅靠 key 的比較來排序 n 個相異 key 的必

然式 (deterministic) 演算法在最差情況下必須作至少

[log(n!)] 次 key 的比較 證明:由輔助定理 7.1 ,任一種僅靠 key 的比

較來排序 n 個相異 key 的必然式 (deterministic) 演算法都對應到一顆有效且被修剪過,並含有 n! 個 leaf 節點的二元決策樹。由輔助定理 7.3 ,該樹的深度大於或等於 [log(n!)] 。由輔助定理 7.2 我們得知任意決策樹最差情況的比較次數為該樹的深度,因此本定理得證

Page 63: 第七章 計算複雜度概論:排序問題
Page 64: 第七章 計算複雜度概論:排序問題

定理 7.3

任一僅靠 key 的比較來排序 n 個相異 key 的必然式 (deterministic) 演算法在最差情況下必須做至少

[nlgn-1.45n] 次 key 的比較 證明:這個證明可由定理 7.2 及輔助定

理 7.4推導而來

Page 65: 第七章 計算複雜度概論:排序問題

7.8.3 平均情況下的下限

Page 66: 第七章 計算複雜度概論:排序問題
Page 67: 第七章 計算複雜度概論:排序問題
Page 68: 第七章 計算複雜度概論:排序問題
Page 69: 第七章 計算複雜度概論:排序問題
Page 70: 第七章 計算複雜度概論:排序問題

圖 7.13

Page 71: 第七章 計算複雜度概論:排序問題
Page 72: 第七章 計算複雜度概論:排序問題
Page 73: 第七章 計算複雜度概論:排序問題
Page 74: 第七章 計算複雜度概論:排序問題

定理 7.4

Page 75: 第七章 計算複雜度概論:排序問題

7.9 分堆排序 ( 基數排序法 ,sort)

Page 76: 第七章 計算複雜度概論:排序問題
Page 77: 第七章 計算複雜度概論:排序問題
Page 78: 第七章 計算複雜度概論:排序問題

演算法 7.6 基數排序

Page 79: 第七章 計算複雜度概論:排序問題
Page 80: 第七章 計算複雜度概論:排序問題

分析演算法 7.6 所有情況的時間複雜度 ( 基數排序法 )

Page 81: 第七章 計算複雜度概論:排序問題

分析演算法 7.6 額外空間的使用情況 ( 基數排序法 )