12.1 堆:html
最小堆(minheap) : 每一結點小於或等於其兩個孩子;其根的兩個孩子一樣爲最小堆。
git
最大堆(maxheap) : 每一結點大於或等於其兩個孩子;其根的兩個孩子一樣爲最大堆。
數組
元素相同,構造的堆也能夠不一樣:
數據結構
操做 | 說明 |
---|---|
addElement | 將給定元素添加到該堆中 |
removeMin | 刪除堆的最小元素 |
findMin | 返回一個指向堆中最小元素的引用 |
重構堆。
學習
堆的根處存儲的是堆中的最小元素,所以只需返回其便可。.net
優先級隊列(priority queue) 和一般的棧和隊列同樣,但裏面的每個元素都有一個優先級 ,在處理的時候,首先處理優先級最高的。若是兩個元素具備相同的優先級,則按照他們插入到隊列中的前後順序處理。設計
雖然堆並不是一個隊列,但其提供了一個高效 的優先級隊列實現。3d
爲能向上遍歷樹,每一個結點存儲了指向雙親的指針。指針
時間複雜度O(log n)調試
12.3.2 removeMin操做:
12.3.3 findMin操做:
時間複雜度爲O(1)
12.4 使用數組實現堆
右孩子位於2(n+1)處
時間複雜度O(log n)
12.4.2 removeMin操做:
12.4.3 findMin操做:
時間複雜度爲O(1)
12.5 使用堆:堆排序
一次刪除一個元素
時間複雜度爲O(n log n)
問題1:如何刪除某一指定結點的子樹。
解決:
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | |
---|---|---|---|
目標 | 3000行 | 15篇 | 300小時 |
第一週 | 0/0 | 1/1 | 12/12 |
第二週 | 935/935 | 1/2 | 24/36 |
第三週 | 849/1784 | 1/3 | 34/70 |
第四周 | 3600/5384 | 1/5 | 50/120 |
第五週 | 2254/7638 | 1/7 | 50/170 |
第六週 | 2809/10447 | 1/9 | 45/215 |
第七週 | 3700/14147 | 1/10 | 40/255 |
第八週 | 3422/17569 | 1/11 | 36/291 |