1 / 20

Chapter 8 堆積

Chapter 8 堆積. 何謂堆積. 何謂堆積 (Heap) ? 堆積是一棵二元樹,其樹根的鍵值大於子樹的鍵值, 必須符合完整二元樹的定義 不管左子樹和右子樹的大小順序 ( 與二元搜尋樹最大的差異處 ). 何謂堆積. 堆積 (Heap) 和 二元搜尋樹 大致上雷同,但有一點點差異。 Heap 在分類上大致可分為 Max-heap, Min-heap, Min-max heap 及 Deap 。 Heap 可用在排序上,此稱為 Heap sort (堆積排序)。 一棵 Max-Heap 不是唯一,因為只要父節點大於子節點即可。. 堆積的建立.

lowri
Download Presentation

Chapter 8 堆積

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. Chapter 8 堆積

  2. 何謂堆積 • 何謂堆積(Heap)? • 堆積是一棵二元樹,其樹根的鍵值大於子樹的鍵值, • 必須符合完整二元樹的定義 • 不管左子樹和右子樹的大小順序(與二元搜尋樹最大的差異處)

  3. 何謂堆積 • 堆積(Heap)和二元搜尋樹大致上雷同,但有一點點差異。 • Heap在分類上大致可分為Max-heap, Min-heap, Min-max heap及Deap。 • Heap可用在排序上,此稱為Heap sort(堆積排序)。 • 一棵Max-Heap不是唯一,因為只要父節點大於子節點即可。

  4. 堆積的建立 • 堆積可以用於排序上,簡稱 Heap Sort。 • 堆積排序的步驟: • 先將資料利用完整二元樹的方式將其建立起來 • 將建立完成的完整二元樹「調整」成 Heap • 以堆疊(由大到小)或佇列(由小到大)的方式輸出

  5. 堆積的建立 • 堆積的調整方式 • 由上而下,從樹根開始分別與其子節點相比,若前者大則不用交換,反之,則要交換;以符合父節點大於子節點 1 1 1 30 23 15 換 換 3 2 3 2 3 2 15 23 23 15 30 30

  6. 堆積的調整 • (一) 為由下而上: • 先算出此棵樹的節點數目,假設n,再取其 n/2 ,從此節點,開始與它的最大子節點相比,若最大子節點的鍵值大於父節點之鍵值,則相互對調,一直做到樹根止。應注意的是,若相互對調後要往下繼續比較,調整的方法如下:

  7. 堆積的調整 • step 1:先將每一節點按完整二元樹的順序加以編號如下圖: 1 15 2 3 23 20 5 6 4 40 8 10

  8. 堆積的調整 • step 2: 6/2 ,故從第3節點開始與其較大的子節點相比。由於20比10大,故調換之。 1 15 2 3 23 10 20 5 6 4 40 8 20 10

  9. 堆積的調整 • step 3:接下來將第2個節點與其較大子節點比,我們發現40大於23,故調換之,如下圖: 1 15 2 3 23 40 20 5 6 4 40 8 10 23

  10. 堆積的調整 • step 4:接下來將第1個節點與其較大子節點比,我們發現40大於15,故調換之,如下圖: 1 15 40 2 3 40 20 15 5 6 4 8 23 10

  11. 堆積的調整 • step 5:雖然皆已調換完成,但因為第2節點小於第4節點(15<23),故需繼續對調,如下圖: 40 40 2 3 2 3 15 20 23 20 5 6 5 6 4 4 8 8 23 10 15 10

  12. 堆積的加入 • 先按照建立一棵完整二元樹的特性將資料加入 • 判斷加入後的二元樹是否為一棵堆積樹,若符合則完成加入;若否,則再加以調整之。 • 假設有一棵Heap,加入30及50。 • 首先按照完整二元樹的特性將30加進來,如下圖:

  13. 40 23 30 15 8 10 堆積的加入 40 23 10 15 8 30

  14. 50 23 40 15 8 10 30 堆積的加入 40 23 30 50 15 8 10 50 30

  15. 堆積的刪除 • Heap的刪除則將完整二元樹的最後一節點取代被刪除的節點,然後判斷是否為一棵Heap,若否,則再依上述的方法加以調整之。 40 40 刪除30 30 10 20 20 15 10 15 調整

  16. 堆積的刪除 40 10 刪除40 調整 15 15 20 20 10 20 15 10

  17. 何謂min-heap • 上述介紹的Heap,稱之為max-heap, • 在max-heap樹中的鍵值,一律是上大於下,節點內的鍵值一律大於其子節點。 • 而min-heap,其節點鍵值一律小於子節點,恰與max-heap相反。 • 加入與刪除的方法與max-heap十分類似。

  18. Deap • Deap同樣也具備了Max-heap與Min-heap的特徵,其定義如下: • Deap的樹根不存任何資料,為一個空節點。 • 樹根的左子樹為一棵Min-heap;右子樹為Max-heap。 • Max-heap與Min-heap存在一對應,假設左子樹中有一節點i,則在右子樹中相同的位置存在一節點j與i對應,且i必須小於等於j。如下圖。

  19. Deap 5 35 21 32 12 30 18 16 25 27 22 29

  20. Deap的加入與刪除 • 加入與刪除的動作與堆積樹一樣。 • 將新的鍵值加入於整顆樹的最後,再調整至符合堆積樹的定義。 • 刪除時,當遇到刪除節點非最後一個節點時,要以最後一個節點的鍵值取代節點。

More Related