最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

《漫畫算法2:小灰的算法進階》第二章 樹的進階

2023-03-24 11:22 作者:方程星  | 我要投稿

什么是二叉查找樹

二叉查找樹(Binary Search Tree):?

1. 如果左子樹不為空,則左子樹上所有節(jié)點的值均小于根節(jié)點的值。

2. 如果右子樹不為空,則右子樹上所有節(jié)點的值均大于根節(jié)點的值。

3. 左、右子樹也都是二叉查找樹。

二叉查找樹

二叉查找樹會維持節(jié)點的有序性,也稱作二叉排序樹(Binary Sort Tree),無論進行多少次插入、刪除操作,都始終保持有序

二叉查找樹的插入和刪除


5<6,5>3,5>4,因此節(jié)點5應(yīng)該插到節(jié)點4的右孩子處

插入后
情況1,待刪除的節(jié)點沒有子節(jié)點
待刪除的節(jié)點12是葉子節(jié)點,沒有孩子,因此直接刪除即可
情況2,待刪除的節(jié)點有一個孩子
待刪除的節(jié)點13只有左孩子,于是我們讓左孩子節(jié)點11取代被刪除的節(jié)點,
節(jié)點11以下的節(jié)點關(guān)系無須變動
待刪除的節(jié)點有兩個孩子
節(jié)點3僅小于節(jié)點5,節(jié)點6僅大于節(jié)點5,兩者都是合適的選擇。但習(xí)慣上我們選擇僅大于待刪除節(jié)點的節(jié)點,也就是用節(jié)點6來取代它,復(fù)制節(jié)點6到原來節(jié)點5的位置
刪除多余的節(jié)點6

二叉查找樹的缺陷

初始二叉查找樹

依次插入如下五個節(jié)點:7, 6, 5, 4, 3

雖然這樣一棵樹也符合二叉查找樹的特性,但是查找節(jié)點的時間復(fù)雜度退化成了O(n)

什么是平衡二叉樹

平衡二叉樹(AVL樹),它在每次插入、刪除節(jié)點之后,可以進行“自平衡”,也就是通過一系列調(diào)整重新達到平衡狀態(tài)。

對于AVL樹的每一個節(jié)點,平衡因子是它的左子樹高度和右子樹高度的差值。

只有當(dāng)二叉樹所有節(jié)點的平衡因子都是-1, 0, 1這三個值的時候,這棵二叉樹才是一棵合格的AVL樹。

節(jié)點4的左子樹高度是1,右子樹不存在,所以該節(jié)點的平衡因子是1-0=1;節(jié)點7的左子樹不存在,右子樹高度是1,所以平衡因子是0-1=-1;所有的葉子節(jié)點,不存在左右子樹,所以平衡因子都是0;AVL樹對平衡因子的限制(只能是-1,0,1),保證了任意節(jié)點的兩棵子樹的高度差都不超過1,這種狀態(tài)被稱為高度平衡

當(dāng)AVL樹插入或刪除節(jié)點時,平衡有可能被打破;原本是一棵平衡的AVL樹,當(dāng)插入了新節(jié)點1時,父節(jié)點2的平衡因子變成了1,祖父節(jié)點4的平衡因子變成了2

AVL樹提供了兩種特殊的操作:左旋和右旋來恢復(fù)AVL樹的平衡

什么是紅黑樹

紅黑樹復(fù)雜一些,通過紅色和黑色兩種節(jié)點,以及若干規(guī)則來判斷平衡;

紅黑樹的存在目的也是為了維護二叉查找樹的平衡

紅黑樹的規(guī)則如下:

1. 節(jié)點是紅色或黑色。

2. 根節(jié)點是黑色。

3. 每個葉子節(jié)點都是黑色的空節(jié)點(NIL節(jié)點)。

4. 每個紅色節(jié)點的子節(jié)點都是黑色(即不存在兩個連續(xù)的紅色節(jié)點)。

5. 從任意節(jié)點到其每個葉子的所有路徑都包含相同數(shù)目的黑色節(jié)點。

典型的紅黑樹

紅黑樹從根到葉子的最長路徑不會超過最短路徑的2倍

紅黑樹的調(diào)整方法有兩種:

調(diào)整的方法有兩種:變色和旋轉(zhuǎn)

在需要頻繁查找時,選用AVL樹更合適,在需要頻繁插入、刪除時,選用紅黑樹

什么是B樹和B+樹

B樹和B+樹非常適合做數(shù)據(jù)庫和文件系統(tǒng)的索引;

B樹:

B樹單一節(jié)點擁有的最多子節(jié)點數(shù)量,稱為B樹的“階”;

一個m階的B樹,具有如下幾個特征:

1. 根節(jié)點至少有兩個子節(jié)點。

2. 每個中間節(jié)點都包含k-1個元素(也被稱為關(guān)鍵字)和k個孩子,其中m/2 <= k<=m。

3. 每一個葉子節(jié)點都包含k-1個元素,其中m/2 <= k<= m。

4. 所有的葉子節(jié)點都位于同一層。

5. 每個節(jié)點中的元素從小到大排列,節(jié)點當(dāng)中k-1個元素正好是k個孩子包含的元素的值域分劃。

B樹
重點來看(2,6)節(jié)點,該節(jié)點有兩個元素2和6,同時又有三個孩子節(jié)點(1)、(3,5)、(8);其中元素1小于父節(jié)點中的元素2,元素3和5在父節(jié)點的元素2和6之間,元素8大于元素6,正好符合剛剛所列的幾條特征(哪幾個特征???)

B樹雖然可以改善數(shù)據(jù)庫查詢的性能,但是卻存在一個不足之處:不方便進行范圍查詢。

一個m階的B+樹具有如下幾個特征:

1. 有k個子樹的中間節(jié)點包含k個元素(B樹中是k-1個元素),每個元素不保存數(shù)

據(jù),所有數(shù)據(jù)都保存在葉子節(jié)點。

2. 所有的葉子節(jié)點包含了全部元素,依照元素的大小升序排列,葉子節(jié)點之間用雙向

指針相連接。

3. 所有中間節(jié)點的元素都同時存在于子節(jié)點,在子節(jié)點元素中是最大(或最小)元

素。

B+樹的結(jié)構(gòu)
在上圖的這棵B+樹中,根節(jié)點的元素8在子節(jié)點(2, 5, 8)中是最大元素,也是葉子節(jié)點(6, 8)的最大元素。根節(jié)點的元素15在子節(jié)點(11, 15)中是最大元素,也是葉子節(jié)點(13, 15)的最大元素。
父節(jié)點的所有元素都出現(xiàn)在子節(jié)點,因此葉子節(jié)點包含了整棵樹的全量信息。
并且每一個葉子節(jié)點都帶有指向相鄰葉子節(jié)點的指針,形成了一個雙向有序鏈表

B+樹用于范圍查詢十分方便。

小結(jié)

二叉查找樹

可以提高節(jié)點查找的效率,并維持節(jié)點的有序性。理想狀態(tài)下,二叉查找樹查找的時間復(fù)雜度是O(logn),但如果節(jié)點分布失衡,查找的時間復(fù)雜度有可能退化到O(n)

平衡二叉樹

也叫作AVL樹,是一種特殊的二叉查找樹,可以自動調(diào)節(jié)平衡。

AVL樹維持著嚴(yán)格的平衡,任意節(jié)點的兩棵子樹的高度差都不超過1。這樣的優(yōu)點是保證了查詢的效率,缺點是維持平衡的成本比較高,適合查詢較多的場景。

紅黑樹

是另一種可以自動調(diào)整平衡的二叉查找樹。

紅黑樹維持著相對的平衡,要求任何一條路徑的長度不超過其他路徑長度的2倍。

這樣的優(yōu)點是降低了維持平衡的成本,缺點是查詢效率略低,適合頻繁插入、刪除的場景。

B樹

解決了從磁盤海量數(shù)據(jù)中查詢的需求,有效減少了磁盤I/O的頻次。

B+樹

是B樹的升級,葉子節(jié)點包括全量數(shù)據(jù),并使用雙向指針連接相鄰節(jié)點,為范圍查詢提供了便利。



《漫畫算法2:小灰的算法進階》第二章 樹的進階的評論 (共 條)

分享到微博請遵守國家法律
湾仔区| 绿春县| 栖霞市| 屏南县| 吉安县| 盘山县| 宜宾市| 南漳县| 徐汇区| 东平县| 定远县| 晋城| 方山县| 祥云县| 偏关县| 亳州市| 乐山市| 宁河县| 元朗区| 旬阳县| 仙居县| 六安市| 登封市| 石楼县| 娄烦县| 阿巴嘎旗| 乌拉特后旗| 措勤县| 光山县| 黔东| 桂林市| 临高县| 衡山县| 工布江达县| 剑川县| 墨江| 江北区| 隆安县| 鄢陵县| 山阳县| 青海省|