實習整理(十五)

上篇博文講到了鏈表的相關操作,接下來講講有關樹的相關知識,畢竟鏈表和樹是筆試,面試的重點,這裏只講幾種類型樹的基本概念而已。。。

二叉查找樹(B樹)
查找樹的定義非常簡單,一句話就是左孩子比父節點小,右孩子比父節點大,還有一個特性就是”中序遍歷“可以讓結點有序。非常適合於範圍查找。時間複雜度O(log(N)),在最壞的情況下會出現“鏈表”的形式,複雜度退化到O(N)

平衡二叉樹(AVL)

二叉查找樹的優化,父節點的左子樹和右子樹的高度之差不能大於1,也就是說不能高過1層,否則該樹就失衡了,此時就要旋轉節點。在編碼時,我們可以記錄當前節點的高度,比如空節點是-1,葉子節點是0,非葉子節點的height往根節點遞增


Treap樹
Treap樹算是一種簡單的優化策略,這名字大家也能猜到,樹和堆的合體,其實原理比較簡單,在樹中維護一個"優先級“,”優先級“ 採用隨機數的方法,但是”優先級“必須滿足根堆的性質,當然是“大根堆”或者“小根堆”都無所謂

Splay樹(伸展樹)
伸展樹的原理是”八二原則”,比如我要查詢樹中的“節點7”,如果我們是AVL的思路,每次都查詢“節點7”,那麼當這棵樹中的節點越來越多的情況下就會呈現下旋,所以複雜度只會遞增,伸展樹的想法就是在第一次查詢時樹裏面會經過一陣痙攣把“節點7”頂成“根節點”,操作類似AVL的雙旋轉,當我們再次查詢同樣的”數字7“時,直接在根節點處O(1)取出,當然這算是一個最理想的情況,有時痙攣過度,會出現糟糕的”鏈表“,也就退化了到O(N),所以伸展樹講究的是”攤還時間“,意思就是說在”連續的一系列操作中的平均時間“,當然可以保證是log(N)

Trie樹(單詞查找樹/字典樹/前綴樹)
是一種用於快速檢索的多叉樹結構,如英文字母的字典樹是一個26叉樹,數字的字典樹是一個10叉樹。用於保存大量的字符串。優點:利用字符串的公共前綴來節約存儲空間

B

二叉樹,每個結點只存儲一個關鍵字,等於則命中,小於走左結點,大於走右結點;

B-樹:多路搜索樹,每個結點存儲M/2M個關鍵字,非葉子結點存儲指向關鍵字範圍的子結點;所有關鍵字在整顆樹中出現,且只出現一次,非葉子結點可以命中;

B+樹:在B-樹基礎上,爲葉子結點增加鏈表指針,所有關鍵字都在葉子結點中出現,非葉子結點作爲葉子結點的索引;B+樹總是到葉子結點才命中;

B*樹:在B+樹基礎上,爲非葉子結點也增加鏈表指針,將結點的最低利用率1/2提高到2/3

以上是從師兄的筆記中借鑑而來的。。。


看了July的博客,提到了B樹,紅黑樹,2-3-4樹,雖然講的不是很詳細和透徹,但如果僅僅只是想要了解,這篇博客已經可以達到需求了

紅黑樹:自平衡二叉查找樹,PS:以前一直認爲自平衡樹就是AVL樹,現在發現並不是這樣,AVL二叉平衡樹是自平衡樹的一種,因爲左右子樹的高度差的絕對值小於等於1,因此也是一種高度自平衡樹
紅黑樹一般用來成爲某些數據結構的底層實現結構,比如C++中set,map等容器的底層實現結構,因爲它查找,插入以及刪除的效率都比較高,時間複雜度爲O(logn)(以2
爲底),它和一般二叉樹有一個區別是,節點不僅存儲關鍵值,同時也要存儲節點的顏色信息
性質:1.根節點爲黑色;2.除根節點以爲其他的節點爲黑色或者紅色;3.若某節點爲紅色,則其子節點都爲黑色;4.任一節點到其所有葉節點所經過的路徑中包含相同相同數目的黑節點;5.葉節點都爲黑色;
紅黑樹的插入和刪除,如果僅僅只是需要你畫出示意圖,我覺得記住這五個性質,對樹進行調整就可以了,包括重新着色和旋轉,但需要寫出代碼的話就還是需要有個規律了

B樹(又稱B-樹):m階多路自平衡樹,它以及它的變型B+樹或者B*樹可以用來作爲文件存儲系統或者數據庫索引(MySQL,MongoDB)的實現結構,因爲查找,插入,刪除效率高,所需的磁盤外設次數較少,時間複雜度爲O(1+log(1+n/2))(以[m/2]爲底)
[m/2] = 大於等於m/2的最小整數
性質:1.根節點至少有兩個子節點;2.節點至少有[m/2]棵子樹,最多有m棵子樹;3.非終端節點的關鍵值的個數=它子樹個數-1,即非終端節點的關鍵值的個數至少爲[m/2]-1,最多爲m-1;4.所有葉節點在同一層
B樹的插入和刪除我也是根據這幾個性質來做的,對父節點進行合併或者分裂,如果代碼實現的話估計會有點難度
B+樹相對於B樹來說爲葉子節點增加了鏈表指針,且所有的關鍵值都在葉子節點中出現了,因此它的查找是一定要在葉子節點中結束的,而B樹可以在非終端節點上結束,它和B樹不同在於節點的關鍵值的個數=它子樹個數
B*樹在B+樹的基礎上爲非終端節點增加了兄弟節點的鏈表指針,它和B+樹不同在於節點至少有(2/3)m棵子樹,因此說它的節點利用率提高了

B-樹和B+樹都支持順序檢索,但不是都支持隨機檢索,B+樹支持隨機檢索,B-樹不支持,B-樹和B+樹都可以用作文件索引結構

2-3-4樹就是一棵特別的B樹,它的子樹的個數只能爲2,3,4,其餘的性質和B樹一樣

未完待續。。。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章