20172316 2018-2019-1《程式設計與資料結構》第七週學習總結
阿新 • • 發佈:2018-11-02
20172316 2018-2019-1《程式設計與資料結構》第七週學習總結
教材學習內容總結
第十一章 二叉查詢樹
二叉查詢樹:
上個星期學習了樹,本星期接著學習樹的一種擴充套件:二叉查詢樹(Binary Search Tree)。它最大的特點就是左孩子小於父節點,右孩子大於父節點,這種特點讓二叉查詢樹從建立到插入元素都能維持排序的屬性(主要表現在:中序遍歷時元素能準確按照由小到大的順序排列),有利於之後對樹中元素的處理,特別是需要用到搜尋時能大大提高搜尋效率(低至O(log₂n))(不平衡樹除外╰(‵□′)╯)。
操作 | 說明 |
---|---|
addElement | 往樹中新增一個元素 |
removeElement | 從樹中刪除一個元素 |
removeAllOccurences | 從樹中刪除所指定元素的任何存在 |
removeMin | 刪除樹中的最小元素 |
removeMax | 刪除樹中的最大元素 |
findMin | 返回一個指向樹中最小元素的引用 |
findMax | 返回一個指向樹中最大元素的引用 |
平衡二叉查詢樹:
二叉查詢樹要表現出它高效的優點,必須要達到平衡,否則其效率甚至不如線性的連結串列。
(圖)
為此,書中介紹了平衡化二叉查詢樹的方法——旋轉,兩種平衡化二叉查詢樹——AVL樹、紅黑樹。
旋轉:以右旋為例,其應用於左子樹高度過高的非平衡樹的平衡化中,步驟為:
- 使(子)樹根的左孩子元素成為新的根元素;
- 使原根元素成為這個新樹根的右孩子元素;
- 使原樹根的左孩子的右孩子,成為原樹根的新的左孩子。
(圖)
左旋反之。並非所有不平衡問題只需要一次旋轉就夠解決了,在具體過程中要應變地使用左右旋轉。
教材學習中的問題和解決過程
一、紅黑樹與AVL樹作為平衡化二叉查詢樹的手段,兩者到底各有何種優越性?
紅黑樹不追求"完全平衡",書中提到:
在某種程度上,紅黑樹中的平衡限制沒有AVL樹那麼嚴格。但是...
非嚴格的平衡給紅黑樹帶來了什麼好處呢?——它的旋轉次數得到降低,任何不平衡將在3次旋轉以內解決,對於插入和刪除導致的失衡,紅黑樹可以更快地調整自己的平衡。
- AVL樹實現完全平衡也有自己的好處,我們之所以平衡化二叉查詢樹,就是為了提高搜尋效率,完全平衡相對應的當然就是最高效的搜尋效率。
二、
程式碼除錯中的問題和解決過程
(無)
程式碼託管
(statistics.sh指令碼的執行結果截圖)
上週考試錯題總結
上週無錯題
學習進度條
程式碼行數(新增/累積) | 部落格量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 5000行 | 30篇 | 400小時 | |
第一週 | 0/0 | 1/1 | 6/6 | |
第二週 | 771/771 | 1/2 | 16/22 | |
第三週 | 562/1233 | 1/3 | 15/37 | |
第四周 | 1503/2736 | 2/5 | 15/52 | |
第五週 | 1152/3888 | 1/6 | 10/62 | |
第六週 | 787/4675 | 1/7 | 10/72 | |
第七週 | 1214/5889 | 1/8 | 9/81 |
結對互評
參考資料
- 《Java程式設計教程(第八版)》電子工業出版社
- 《使用碼雲和部落格園學習簡易教程》
- 《使用開源中國(碼雲)託管程式碼》
- 資料結構(一) 單鏈表的實現-JAVA