堆積(Heap Tree) 授課老師:蕭志明.

Slides:



Advertisements
Similar presentations
大綱 1. 三角函數的導函數. 2. 反三角函數的導函數. 3. 對數函數的導函數. 4. 指數函數的導函數.
Advertisements

1 第八章 深入探討樹狀結構. 2 目次 8.1 m-way 搜尋樹 8.2 B-tree 8.3 動動腦時間 8.4 練習題解答.
《公路纵断面设计》 —— 纵断面设计的要求 道桥系 二○○七年五月. 纵断面设计的一般要求 1 .纵坡设计必须满足《公路工程技术标准》中的各项规定。 2 .为保证汽车能以一定的车速安全舒顺地行驶,纵坡应具有 — 定 的平顺性,起伏不宜过大及过于频繁。尽量避免采用极限纵坡 值.缓和坡段应自然地配合地形设置,在连续采用极限长度的.
變數與函數 大綱 : 對應關係 函數 函數值 顧震宇 台灣數位學習科技股份有限公司. 對應關係 蛋餅飯糰土司漢堡咖啡奶茶 25 元 30 元 25 元 35 元 25 元 20 元 顧震宇 老師 台灣數位學習科技股份有限公司 變數與函數 下表是早餐店價格表的一部分: 蛋餅 飯糰 土司 漢堡 咖啡 奶茶.
中二數學 第五章 : 二元一次方程 二元一次方程的圖像.
Sort(排序) 授課者:驕芸.
資料結構 老師:李崇明 助教:楊斯竣.
Tree (2): heap, deap, 2-3 tree, 2-3-4tree
Chapter 6 樹狀結構.
新世代計算機概論 第15章 資料結構.
Chapter 5 樹狀結構.
二元一次不等式 課堂練習一:圖解 x
Chapter 4 Spanning Trees
第11章 資料結構 – 使用C語言的模組 11-1 資料結構的基礎 11-2 C語言的模組化程式設計 11-3 基本鏈結串列
第7章 樹與二元樹 (Trees and Binary Trees)
第1章 認識Arduino.
樹狀結構 Trees.
第七章 AVL搜尋樹 二元搜尋樹簡單易懂,不過有一個問題:它並非平衡樹。本章將介紹平衡的 AVL 搜尋樹,討論它的資料結構、函式,並設計程式使用它。
4B冊 認識公倍數和最小公倍數 公倍數和最小公倍數的關係.
資料結構 第6章 樹狀結構.
第十一章 Heap 結構.
(Circular Linked Lists)
TCP/IP介紹 講師:陳育良 2018/12/28.
資料結構–樹(Tree) 綠園.
4.1 單向鏈結串列 4.2 堆疊的加入與刪除 4.3 佇列的加入與刪除 4.4 其他型式的佇列
第三章 鏈結串列 3-1  單向鏈結串列 3-2 環狀鏈結串列 3-3 雙向鏈結串列.
鄧姚文 資料結構 第六章:樹(Tree) 鄧姚文
Chapter 9 高度平衡二元搜尋樹 AVL Binary Search Tree
Chapter 8 排序 資料結構導論 - C語言實作.
Chap3 Linked List 鏈結串列.
第一章 直角坐標系 1-1 數系的發展.
Chapter 11 B-tree 11.1 m-way 搜尋樹 11.2 B-tree.
Ch 3 Dynamic Programming (動態規劃).
Chap4 Tree.
資料結構 7-1 陣列 7-2 鏈結串列 7-3 堆疊和佇列 7-4 樹狀結構.
網路遊戲版 幸福農場168號.
第二次電腦實習課 說明者:吳東陽 2003/10/07.
北一女中 資訊選手培訓營.
第一章 直角坐標系 1-3 函數圖形.
資料結構使用Java 樹(Tree).
第 19 章 XML記憶體執行模式.
Reference to FUNDAMENTALS OF DATA STRUCTURE IN C++
Definition of Trace Function
數字定位棋 1-7
安裝 / 操作 flashget SOP (以Win 7 作業系統為範例)
CH05. 選擇敘述.
挑戰C++程式語言 ──第8章 進一步談字元與字串
圓的定義 在平面上,與一定點等距的所有點所形成的圖形稱為圓。定點稱為圓心,圓心至圓上任意一點的距離稱為半徑,「圓」指的是曲線部分的圖形,故圓心並不在圓上.
資料結構與C++程式設計進階 樹狀結構(Tree) 講師:林業峻 CSIE, NTU 11/ 12, 2009.
第 八 章 高等樹 課程名稱:資料結構 授課老師:________ 2019/4/28.
蕭志明 老師 Algorithm(演算法) Ext:6779
蕭志明 老師 Algorithm(演算法) /FB:
13.1 氣泡排序 13.2 選擇排序 13.3 插入排序 13.4 合併排序 13.5 快速排序
第八章 堆 積 堆積(heap)是樹結構的第三種型態。堆積是一棵二元樹,其左右子樹節點的值均較其父母節點的值小。堆積的根節點值保證是該樹最大值。這中堆績稱為最大堆績。堆積的子樹可擺在左邊當左子樹,也可擺在右邊當右子樹,因此左右子樹俱有相同的性質。 堆積還有一個有趣的特性,就是以陣列實作較以連結串列實作佳。當以陣列實作堆積時,已知父母節點的註標(subscript)就可算出其左右子樹節點的註標,反之亦然。
講師:郭育倫 第3章 基本資料結構 講師:郭育倫
取得與安裝TIDE 從TIBBO網站取得TIDE
動畫演示 Node規範了一些基本的方法,像是增加節點、刪除節點、讓節點做一些事、取得第n個節點等等
6.1 樹狀結構的一些專有名詞 6.2 二元樹 6.3 二元樹的表示方法 6.4 二元樹的追蹤 6.5 引線二元樹 6.6 其它議題
5. 令圖畫動起來 Tween 功能介紹 移動效果 顏色漸變效果 形狀漸變效果 離開.
11058: Encoding ★☆☆☆☆ 題組:Problem Set Archive with Online Judge
坐標 →配合課本 P49~56 重點 在坐標平面上,以 ( m , n ) 表示 P 點的坐標,記為 P ( m , n ),m 為 P 點的 x 坐標,n 為 P 點的 y 坐標。 16.
第7章 資料結構 7-1 陣列 7-2 鏈結串列 7-3 堆疊和佇列 7-4 樹狀結構.
本教學投影片係屬教科書著作之延伸,亦受著作權法之保護。
第一章 直角坐標系 1-3 函數及其圖形.
資料結構與C++程式設計進階 期末考 講師:林業峻 CSIE, NTU 7/ 15, 2010.
第四組 停車場搜尋系統 第四組 溫允中 陳欣暉 蕭積遠 李雅俐.
Trees 授課者:驕芸.
10303: How Many Trees? ★★☆☆☆ 題組:Contest Archive with Online Judge
11621 : Small Factors ★★☆☆☆ 題組:Problem Set Archive with Online Judge
Joining Multiple Tables
Presentation transcript:

堆積(Heap Tree) 授課老師:蕭志明

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

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

堆積範例

堆積範例

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

堆積操作

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

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

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

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

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

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

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

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

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

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

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

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

圖 9-7 重新向下堆積

Heap的加入

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

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

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

Heap的刪除

Heap的刪除

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

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

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

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

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

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

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

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的特性。

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

min-max heap的加入

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

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

min-max heap的加入 交換後,由於10>5,不符合第二項定義,將5與10對調。

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

min-max heap的刪除

min-max heap的刪除

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

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

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

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

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

Deap

Deap

Deap的加入 Deap的加入動作與其它Heap一樣,將新的鍵值加入於整棵樹的最後,再調整符合Deap的定義。

Deap的加入 假設已存在一deap如下:

Deap的加入 若加入25,加入後右子樹仍為一棵max-heap,且左子樹對應節點15小於等於它所對應的右子樹節點25,符合deap的定義,加入的結果如下:

Deap的加入 加入17,加入後的圖形如下所示:

Deap的加入 此時右子樹仍為max-heap,但17小於其左子樹的對應節點20,故將17與20交換。

Deap的加入 加入40,如下所示:

Deap的加入 加入後左子樹雖為min-heap,但40大於其對應節點25(與節點40的父節點對應之右子樹節點),不符合deap的定義,故將40與25交換,如下所示:

Deap的加入 交換後樹中的右子樹不是一棵max-heap,重新將其調整為max-heap即可。

Deap的刪除 Deap的刪除動作與其它Heap一樣,當遇到刪除節點非最後一個節點時,要以最後一個節點的鍵值取代刪除節點,並調整至符合deap的定義。

Deap的刪除

Deap的刪除

Deap的刪除 若刪除29,則直接刪除即可,結果如下圖所示:

Deap的刪除 刪除21,此時以最後一個節點22取代之,再將最後一個節點刪除,檢查左子樹仍為一棵min-heap,且節點鍵值22小於其對應節點32,不需作任何調整。刪除結果如下:

Deap的刪除

Deap的刪除 刪除12,以最後一個節點27取代。

Deap的刪除 左子樹不符合min-heap的定義,將27子節點中鍵值較小者16交換。

Deap的刪除 最後16與其對應的30比較;16小於30,並且27也小於它所對應max-heap那邊的30,故不需再做調整。