1 / 81

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

第七章 計算複雜度概論:排序問題. 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 平均情況下的下限

Télécharger la présentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第七章計算複雜度概論:排序問題 • 7.1計算複雜度 • 7.2插入排序與選擇排序 • 7.3每次比較至多移除一個導致之演算法的下限 • 7.4再探合併排序 • 7.5再探快速排序 • 7.6堆積排序 7.6.1堆積與基本的堆積副程式 7.6.2實作堆積排序

  2. 7.7合併排序、快速排序、堆積排序 的比較 • 7.8僅利用Key的比較進行排序的下限 7.8.1提供排序演算法使用的 決策樹(decision tree) 7.8.2最差情況下的下限 7.8.3平均情況下的下限 • 7.9分堆排序(基數排序法, Radix Sort)

  3. 7.1計算複雜度 • 計算複雜度:研究解決一個給定問題之所有可能演算法的領域,而這個領域與演算法的設計及分析關聯性很高。 • 排序工作:重排紀錄,使得紀錄會根據Key值的大小依序排好。

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

  5. 7.2 插入排序與選擇排序

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

  7. 分析演算法7.1 最差情況下,以key比較次數為準的時間複雜度分析(插入排序) • 基本運算:比較S[ j ]與x • 輸入大小:n,被拿來排序的key之個數

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

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

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

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

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

  13. 定理7.1

  14. 7.4再探合併排序

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

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

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

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

  19. 分析演算法7.4 額外空間的使用情況分析(合併排序4) • 在一般的情況下,使用的額外空間在 個鏈結中。“在 個鏈結中”代表 鏈結的個數在 中

  20. 7.5再探快速排序

  21. 額外空間的使用情況分析(改良式快速排序) • 在這個版本中,最差情況發生在當partition每次都把陣列切成一半的時候,造成堆疊的深度約為lgn。因此最差的空間使用情況為

  22. 7.6 堆積排序 7.6.1 堆積與基本的堆積副程式

  23. 完整二元樹(complete binary tree) • 所有內部節點都有兩個子節點 • 所有leaf節點的深度均為d

  24. 本質完整二元樹(essentially complete binary tree) • 如果從根節點看到d-1層是一顆完整二元樹 • 在第d層的節點盡量靠左邊

  25. 堆積(heap) • 屬於本質完整二元樹 • 儲存於節點中的值均來自於一個有序集合 • 節點的值大於或等於其子節點的值。這點稱作堆積特性(heap property)

  26. 圖7.6

  27. 圖7.6的高階虛擬碼

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

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

  30. 圖7.7

  31. 圖7.7的高階虛擬碼

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

  33. 7.6.2實作堆積排序

  34. 堆積(heap)的資料結構 • 在一般的情況下,使用的額外空間在 個鏈結中。“在 個鏈結中”代表鏈結的個數在 中

  35. 演算法7.5 堆積排序

  36. 分析演算法7.5 以key的比較次數 來看,最差情況的時間複雜度分析 • 基本運算:在副程式siftdown中,key的比較次數 • 輸入大小:n,將被排序key的數目

  37. 分析Makeheap

  38. 分析removekeys

  39. 圖7.10

  40. 前兩個分析的總結

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

More Related