[資料結構] Heap 的概念與實作 - 資工學習筆記
文章推薦指數: 80 %
Heap是一種資料結構,使用一維陣列來儲存在理解上可以把他想成是一顆tree 而heap有兩個property: Heap property: min-heap: root必為最小的值 ...
2016年8月10日星期三
[資料結構]Heap的概念與實作
Heap是一種資料結構,使用一維陣列來儲存
在理解上可以把他想成是一顆tree
而heap有兩個property:
Heapproperty:
min-heap:root必為最小的值
max-heap:root必為最大的值
Shapeproperty:由左至右,每層都填滿
因為擁有這樣的特性,heap可以快速的拿到最大或最小值,因此也可以拿來做sorting--Heapsort,時間複雜度是O(nlogn)
概念:
圖片來源:https://en.wikipedia.org/wiki/Heap_(data_structure)
上圖是max-heap的範例,也就是說root永遠是最大值。
如:100>19和36,19>17和3等。
而在實作時是用陣列的方式儲存,依序是:100,19,36,17,3,25,1,2,7。
以下將分成insert及delete說明。
Insert:
由於heap一定是由左到右依序填滿,因此我們可以將要insert進來的node先放在整個tree的最後面,再慢慢地與root交換,直到符合heap的要求。
以上圖為例,假設我們現在要insert一個新的node,值是30,則我們先將其放在3的下面,當成3的子節點,再往上看他的root。
發現30>3,則交換。
再往上看,發現30>19,則再交換,接著再往上看,發現30<100,於是停止。
Delete
刪除的時候也是一樣,當我們拿掉root的時候,先將整個陣列的最後一個值放上來,再做調整。
以上圖為例,假如我們要刪掉36這個node,則將7移到36的位置,再往下看他的子節點,發現25>7則跟25交換,接著再看右節點,發現25>1,所以停止。
張貼者:
柚子
於
清晨6:09
以電子郵件傳送這篇文章BlogThis!分享至Twitter分享至Facebook分享到Pinterest
標籤:
資料結構
沒有留言:
張貼留言
較新的文章
較舊的文章
首頁
訂閱:
張貼留言(Atom)
標籤
多媒體
資料結構
電腦相關素材網站
Ajax
AndroidStudio
API
ChromeExtension
Docker
Git
Groovy&Grails
Web
XMPP
網誌存檔
►
2017
(1)
►
二月
(1)
▼
2016
(8)
►
十二月
(1)
▼
八月
(2)
[資料結構]Heap的概念與實作
[Heroku]將NodeJS部署到Heroku上
►
六月
(1)
►
四月
(2)
►
二月
(2)
►
2015
(17)
►
十二月
(2)
►
九月
(2)
►
六月
(1)
►
五月
(4)
►
四月
(8)
相關網站
XDite'sBlog
搞笑談軟工
延伸文章資訊
- 1用Heap 實作Priority Queue - 朝陽科技大學
所謂 heap property (或稱 heap condition ) 是指每個node 內的資料比它左右兩側child nodes 內的資料都小(但左右兩child nodes 之間並無一...
- 2Python實作排序演算法-堆積排序法(Heap Sort)
Heap sort是一種在所以有情況下的時間複雜度都能維持在N log N的排序演算法,算一種效率相當好的排序演算法,我們會以Python實作此演算法。
- 3Heap (堆) — wdv4758h-notes latest 說明文件
Heap 常被作為Priority Queue (一種Abstract Data Type)的實作方式。 而一個Heap 常見的實作為Binary Heap,它的樹為Complete Binar...
- 4堆積排序Heapsort
一般來說heapsort 常用實作後者。 Heapify 是指將序列修正至符合heap ordering 的序列。給定一個元素,假定其為非法的heap order,而該元素之後的subtree ...
- 5【Day18】[資料結構]-堆積Heap-實作 - iT 邦幫忙
堆積(Heap)建立的方法(以最大堆積實作) maxHeapify: 最大堆積化push: 新增元素pop: 刪除特定元素popRoot: 刪除根節點(最大值) getRoot: 查看根節點(最...