20172315 2018-2019-1 《程式設計與資料結構》第八週學習總結
阿新 • • 發佈:2018-11-10
20172315 2018-2019-1 《程式設計與資料結構》第八週學習總結
教材學習內容總結
- 堆是一棵完全二叉樹,其中的每一結點都小於或等於它的兩個孩子。
- 一個堆也可以是最大堆(maxheap),其中的結點大於或等於它的左右孩子。
- 最小堆將其最小元素儲存在該二又樹的根處,且其根的兩個孩子同樣也是最小堆。
- addElement方法將給定的Comparable元素新增到堆中的恰當位置處,且維持該堆的完全性屬性和有序屬性。
- 因為一個堆就是一棵完全樹,所以對於插入的新結點而言,只存在一個正確的位置,且它要麼是h層左邊的下一個空位置,要麼是h+1層左邊的第1個位置(如果h層是滿的話)。
- 通常,在堆實現中,我們會對樹中的最末一個結點,或更為準確是,最末一片葉子進行跟蹤記錄。
- 要維持該樹的完全性,那麼只有一個能替換根的合法元素,且它是儲存在樹中最末一片葉子上的元素。
- 雖然最小堆根本就不是一個佇列,但是它卻提供了一個高效的優先順序佇列實現。
- 因為我們要求在插入元素後能夠向上遍歷該樹,所以堆中結點必須儲存指向其雙親的指標。
- 在二又樹的陣列實現中,樹的根位於位置0處,對於每一結點n,n的左孩子將位於陣列的2n+l位置處,n的右孩子將位於陣列的2(n+l)位置處。
- 連結串列實現和陣列實現的addElement操作的時間複雜度同為O(logn)。
- 連結串列實現和陣列實現的removeMin操作的複雜度同為0(logn)。
- heapSort方法的兩部分構成:新增列表的每個元素,然後一次刪除一個元素。
堆排序的複雜度為O(nlogn)。
教材學習中的問題和解決過程
- 問題1:為什麼要維持該樹的完全性,那麼只有一個能替換根的合法元素,且它是儲存在樹中最末一片葉子上的元素
問題1解決方案:由於堆是佇列結構,只能從堆中刪除堆頂元素。移除堆頂元素之後,用堆的最後一個節點填補取走的堆頂元素,並將堆的實際元素個數減1。但用最後一個元素取代堆頂元素之後有可能破壞堆,因此需要將對自頂向下調整,使其滿足最大或最小堆。
程式碼除錯中的問題和解決過程
- 問題1:對於pp12.1說的堆中的比較操作必須依照進入該佇列的順序來進行是什麼意思
- 問題1解決方案:優先順序佇列把優先順序改為一樣即可解決
程式碼託管
(statistics.sh指令碼的執行結果截圖)
上週考試錯題總結
- 錯題1及原因,理解情況
Insertion sort is an algorithm that sorts a list of values by repetitively putting a particular value into its final, sorted, position.
A . true
B . false
正確答案: B
你的答案: A
insertion sort:插入排序一種排序演算法,通過反覆地把某個元素插入到之前已排序的子列表中,實現元素的排序。
結對及互評
點評模板:
- 部落格中值得學習的或問題:
- 對於教材內容解析到位
- 對於問題探討不夠
- 對於教材內容解析到位
- 程式碼中值得學習的或問題:
- 程式碼簡潔,一目瞭然
- 程式碼註釋過少
點評過的同學部落格和程式碼
學習進度條
程式碼行數(新增/累積) | 部落格量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 5000行 | 30篇 | 400小時 | |
第一週 | 0/0 | 0/0 | 0/0 | |
第二週 | 800/800 | 2/2 | 18/18 | |
第三週 | 600/1400 | 3/5 | 22/40 | |
第四周 | 700/1300 | 3/8 | 22/62 | |
第五週 | 400/1700 | 3/11 | 22/84 | |
第六週 | 200/1900 | 2/13 | 20/94 | |
第七週 | 400/2300 | 2/15 | 20/114 | |
第八週 | 600/2900 | 2/17 | 20/134 |