820 likes | 982 Views
第七章 計算複雜度概論:排序問題. 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 平均情況下的下限
E N D
第七章計算複雜度概論:排序問題 • 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平均情況下的下限 • 7.9分堆排序(基數排序法, Radix Sort)
7.1計算複雜度 • 計算複雜度:研究解決一個給定問題之所有可能演算法的領域,而這個領域與演算法的設計及分析關聯性很高。 • 排序工作:重排紀錄,使得紀錄會根據Key值的大小依序排好。
分析演算法7.1 最差情況下,以key比較次數為準的時間複雜度分析(插入排序) • 基本運算:比較S[ j ]與x • 輸入大小:n,被拿來排序的key之個數
分析演算法7.1平均情況下,以key比較次數為準的時間複雜度分析(插入排序)分析演算法7.1平均情況下,以key比較次數為準的時間複雜度分析(插入排序)
分析演算法7.1 額外空間的使用情況(插入排序) • 唯一會隨著n的增加而增加的使用空間的是輸入陣列S的大小。因此,該演算法屬於原地置換排序,而額外使用空間的複雜度在 中
表7.1 交換排序、插入排序、 與選擇排序的分析摘要
7.3 每次比較至多移除 一個倒置之演算法的下限
分析演算法7.2 額外空間的使用情況(合併排序2)
分析演算法7.4 額外空間的使用情況分析(合併排序4) • 在一般的情況下,使用的額外空間在 個鏈結中。“在 個鏈結中”代表 鏈結的個數在 中
額外空間的使用情況分析(改良式快速排序) • 在這個版本中,最差情況發生在當partition每次都把陣列切成一半的時候,造成堆疊的深度約為lgn。因此最差的空間使用情況為
7.6 堆積排序 7.6.1 堆積與基本的堆積副程式
完整二元樹(complete binary tree) • 所有內部節點都有兩個子節點 • 所有leaf節點的深度均為d
本質完整二元樹(essentially complete binary tree) • 如果從根節點看到d-1層是一顆完整二元樹 • 在第d層的節點盡量靠左邊
堆積(heap) • 屬於本質完整二元樹 • 儲存於節點中的值均來自於一個有序集合 • 節點的值大於或等於其子節點的值。這點稱作堆積特性(heap property)
移除位於根節點的key並回覆堆積特性函式之高階虛擬碼移除位於根節點的key並回覆堆積特性函式之高階虛擬碼
給定一個具有n個key的堆積,負責將排序好的序列放進陣列s函式的高階虛擬式給定一個具有n個key的堆積,負責將排序好的序列放進陣列s函式的高階虛擬式
堆積(heap)的資料結構 • 在一般的情況下,使用的額外空間在 個鏈結中。“在 個鏈結中”代表鏈結的個數在 中
分析演算法7.5 以key的比較次數 來看,最差情況的時間複雜度分析 • 基本運算:在副程式siftdown中,key的比較次數 • 輸入大小:n,將被排序key的數目