1 / 67

堆積 (Heap Tree)

堆積 (Heap Tree). 授課老師:蕭志明. 何謂堆積. 堆積 (Heap) 和二元搜尋樹大致上雷同,但有一點點差異。 Heap 在分類上大致可分為 Max-heap, Min-heap, Min-max heap 及 Deap 。 Heap 也可用在排序上,此稱為 Heap sort (堆積排序)。. Definition. 最大樹 ( max tree ) 是一種樹,其中每一個節點的值不小於它的子節點 ( 如果存在的話 ) 的鍵值。   最大累堆 ( max heap ) 為一種也是最大樹的完整二元樹。  

erwin
Download Presentation

堆積 (Heap Tree)

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. 堆積(Heap Tree) 授課老師:蕭志明

  2. 何謂堆積 • 堆積(Heap)和二元搜尋樹大致上雷同,但有一點點差異。 • Heap在分類上大致可分為Max-heap, Min-heap, Min-max heap及Deap。 • Heap也可用在排序上,此稱為Heap sort(堆積排序)。

  3. Definition • 最大樹 ( max tree ) 是一種樹,其中每一個節點的值不小於它的子節點 ( 如果存在的話 ) 的鍵值。   • 最大累堆 ( max heap ) 為一種也是最大樹的完整二元樹。   • 最小樹 ( min tree ) 是一種樹,其中每一個節點的值不大於它的子節點 ( 如果存在的話 ) 的鍵值。  最小累堆 ( min heap ) 為一種也是最小樹的完整二元樹。

  4. 堆積範例

  5. 堆積範例

  6. 何謂堆積 它是一棵Heap,而不是二元搜尋樹。在調整的過程中有二種方式: • 一是由上而下,從樹根開始與其子節點相比,若前者大則不用交換 • ,反之,則要交換;以符合父節點大於子節點。

  7. 堆積操作

  8. 堆積操作 此種方法也可以讓子節點先比,找出最大者再與其父節點比,此種方法至多只要做一次對調即可,如下圖23和30中30較大,因此15和30對調。由於這種方式較快,故若以由上而下調整時,皆以此種方式進行之。

  9. 何謂堆積 一棵Heap不是唯一,因為只要父節點大於子節點即可。需在此提醒讀者的是,當中間有某些節點互換時,需要再往上相比較,直到父節點大於子節點為止。

  10. 基本的堆積樹演算法 • 堆積樹有二個基本的維護作業: • 新增。 • 刪除。 • 對堆積樹進行追蹤、搜尋與列印,是沒有意義的。 • 在這一方面,它比較像是一個限制資料結構。 • Heap也可用在排序上,此稱為Heap sort(堆積排序)。

  11. 基本的堆積樹演算法 為了實作新增與刪除作業,需要二個基本的演算法: • 重新向上堆積 • 重新向下堆積。

  12. 重新向上堆積 (ReheapUp) • 假設一個類完全二元樹包含N個節點,其中N-1個節點滿足堆積樹的順序性質,但是最後一個節點不滿足。 • 換句話說,倘使最後一個節點不存在,則此結構即成為一個堆積樹。 • 重新向上堆積 (ReheapUp),將最後一個節點往上移動,直到它位於正確的位置,以符合堆積的定義。 • 圖9-4顯示調整的情況,在進行重新向上堆積樹之前,最後一個節點的順序不對。而在操作之後,它會位於正確的位置,因此堆積樹也就多了一個節點。

  13. 重新向上堆積 (ReheapUp) • 新增在葉節點進行。 • 堆積樹是一個完全或類完全樹,新節點必須放在葉階層的第1個(最左邊)空位,如圖9-4所示。 • 如果新節點的鍵值大於父節點,就交換兩者的資料與鍵值,將新節點往上移動。 • 經由不斷地改變子-父節點的鍵值與資料,新節點最後會到達正確的位置。 • 重新向上堆積 (ReheapUp) 藉由將最後一個節點向上移動,直到它位於正確的位置,以修復堆積樹的結構。

  14. 圖 9-4 重新向上堆積作業

  15. 重新向上堆積 (ReheapUp) • 圖9-5追蹤ReheapUp操作。 • 依定義25比父節點12的左子樹的所有鍵值都大。於是將25與12交換。 • 接著發現25依然大於其父節點21,所以再交換一次。 • 最後目標節點鍵值25小於父節點鍵值42,表示找到正確的位置,整個操作結束。

  16. 圖 9-5 重新向上堆積範例

  17. 重新向下堆積 (ReheapDown) 重新向下堆積 (ReheapDown) • 假設一個類完全二元樹,除了根節點之外,滿足堆積樹的順序性質。 • 這會發生在刪除根節點時,剩下兩個堆積樹。 • 為了修正這種情況,將最後一個節點資料移到根節點。很明顯地,這會破壞堆積樹的性質。 • 重新向下堆積 (ReheapDown) 由根節點向下移動,一直找到它正確的位置為止。 • 為了修復結構,需要將根節點向下移動,直到它的位置符合堆積樹的順序規定。 • 們稱此作業為重新向下堆積(ReHeapDown),如圖9-6所示。

  18. 圖 9-6 重新向下堆積的例子

  19. 重新向下堆積 (ReheapDown) • 圖9-7顯示重新向下堆積的作業過程。 • 開始時,根節點10小於其子樹,所以要檢查左右子樹,並選擇比較大的子樹32,與根節點作 交換。 • 圖9-7(b) 顯示交換之後的情況,繼續檢查子樹以判斷是否可以結束作業,發現10小於其子樹,所以要將10與比較大的子樹30作交換。 • 此時,已到達葉節點,所以可以結束作業。

  20. 圖 9-7 重新向下堆積

  21. Heap的加入

  22. Heap的加入 加入30及50。 首先按照完整二元樹的特性將30加進來, 如下圖

  23. Heap的加入 • 因為加入50後不是一棵Heap,所以要加以調整之。 • 由於原先已是一棵Heap,所以,只要將加入的那一個節點往上調整即可。

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

  25. Heap的刪除

  26. Heap的刪除

  27. Heap的刪除 再刪除40,則將10取代之。

  28. 堆積練習 再舉一例,有一棵Heap如下:

  29. 堆積練習 今欲將40刪除,則以15取代40(因為15在完整二元樹中是最後一個節點)

  30. 堆積練習 此時將15和其所屬的最大子節點比較,亦即15和35(因為它大於30)比較,直接將15和35交換。

  31. 何謂min-heap 上述介紹的Heap,我們稱之為max-heap,在max-heap樹中的鍵值,一律是上大於下,節點內的鍵值一律大於其子節點。其中min-heap的觀念十分簡單,其節點鍵值一律小於子節點,恰與max-heap相反,如下圖即為一棵min-heap的例子。

  32. 何謂min-heap 由於其加入與刪除的方法與max-heap十分類似,在此就不重覆說明了。

  33. min-max heap min-max heap包含了min-heap與max-heap兩種Heap的特徵

  34. min-max heap

  35. min-max heap • 何謂min-max heap: • 為了方便解說,我們就直接以上圖為例,來定義min-max heap,必須符合下列三項定義: 1.min-max heap是以一層min-heap,一層max-heap交互構成的。 2.樹中為min-heap的部分,仍需符合min-heap的特性。 3.樹中為max-heap的部分,仍需符合 max-heap的特性。

  36. min-max heap的加入 min-max heap的加入與max-heap的原理差不多,但是加入後,要調整至符合上述min-max heap的定義。

  37. min-max heap的加入

  38. min-max heap的加入 • 若加入5,步驟如下:

  39. min-max heap的加入 • 加入後18>5,不符合第一項定義,將5與18交換。

  40. min-max heap的加入 • 交換後,由於10>5,不符合第二項定義,將5與10對調。 此時已符合min-max heap的定義,不須再作調整。

  41. min-max heap的刪除 • 若刪除min-max heap的最後一個節點,則直接刪除即可;否則,先將刪除節點鍵值與樹中的最後一個節點對調,再作調整動作,亦即以最後一個節點取代被刪除節點。假設已存在一棵min-max heap如下:

  42. min-max heap的刪除

  43. min-max heap的刪除

  44. min-max heap的刪除 • 若刪除45,則直接刪除。

  45. min-max heap的刪除 • 若刪除40,則需以最後一個節點的鍵值18取代40。

  46. min-max heap的刪除 • 交換後18<19,不符合第一項定義,將18與19交換。

  47. min-max heap的刪除 • 交換後,由於19小於32、28、34、31,不符合第三項定義,必需將19與最大的鍵值34交換。 符合min-max heap的定義,刪除動作結束。

  48. Deap • Deap同樣也具備max-heap與min-heap的特徵,其定義如下: 1.Deap的樹根不儲存任何資料,為一空節點。 2.樹根的左子樹,為一棵min-heap;右子樹則為max-heap。 3.min-heap與max-heap存在一對應,假設左子樹中有一節點為i,則在右子樹中必存在一節點j與i對應,則i必須小於等於j。

  49. Deap

  50. Deap

More Related