B樹 B 樹的總結

2021-08-20 01:31:54 字數 1798 閱讀 7676

磁碟中有兩個機械運動的部分,分別是碟片旋轉和磁臂移動。碟片旋轉就是我們市面上所提到的多少轉每分鐘,而磁碟移動則是在碟片旋轉到指定位置以後,移動磁臂後開始進行資料的讀寫。那麼這就存在乙個定位到磁碟中的塊的過程,而定位是磁碟的訪問中花費時間比較大的一塊,畢竟機械運動花費的時候要遠遠大於電子運動的時間。當大規模資料儲存到磁碟中的時候,顯然定位是乙個非常花費時間的過程,但是我們可以通過b樹進行優化,提高磁碟讀取時定位的效率。

為什麼b類樹可以進行優化呢?我們可以根據b類樹的特點,構造乙個多階的b類樹,然後在盡量多的在結點上儲存相關的資訊,保證層數盡量的少,以便後面我們可以更快的找到資訊,磁碟的i/o操作也少一些,而且b類樹是平衡樹,每個結點到葉子結點的高度都是相同,這也保證了每個查詢是穩定的。

這裡的b樹,也就是英文中的b-tree,乙個 m 階的b樹滿足以下條件:

每個結點至多擁有m棵子樹;

根結點至少擁有兩顆子樹(存在子樹的情況下);

除了根結點以外,其餘每個分支結點至少擁有 m/2 棵子樹;

所有的葉結點都在同一層上;

有 k 棵子樹的分支結點則存在 k-1 個關鍵碼,關鍵碼按照遞增次序進行排列;

關鍵字數量需要滿足ceil(m/2)-1 <= n <= m-1;

舉個栗子:

b樹上大部分的操作所需要的磁碟訪問次數和b樹的高度是成正比的,在b樹中可以檢查多個子結點,由於在一棵樹中檢查任意乙個結點都需要一次磁碟訪問,所以b樹避免了大量的磁碟訪問。

既然是樹,那麼必不可少的操作就是插入和刪除,這也是b樹和其它資料結構不同的地方,當然了,還有必不可少的搜尋,分享乙個對b樹的操作進行視覺化的**,它是由usfca提供的。

假定對高度為h的m階b樹進行操作。

新結點一般插在第h層,通過搜尋找到對應的結點進行插入,那麼根據即將插入的結點的數量又分為下面幾種情況。

其過程如下:

同樣的,我們需要先通過搜尋找到相應的值,存在則進行刪除,需要考慮刪除以後的情況,

其餘情況參照bst中的刪除。

其過程如下:

由於b+樹的資料都儲存在葉子結點中,分支結點均為索引,方便掃庫,只需要掃一遍葉子結點即可,但是b樹因為其分支結點同樣儲存著資料,我們要找到具體的資料,需要進行一次中序遍歷按序來掃,所以b+樹更加適合在區間查詢的情況,所以通常b+樹用於資料庫索引,而b樹則常用於檔案索引。

同樣的,以乙個m階樹為例:

根結點只有乙個,分支數量範圍為[2,m];

分支結點,每個結點包含分支數範圍為[ceil(m/2), m];

分支結點的關鍵字數量等於其子分支的數量減一,關鍵字的數量範圍為[ceil(m/2)-1, m-1],關鍵字順序遞增;

所有葉子結點都在同一層;

其操作和b樹的操作是類似的,不過需要注意的是,在增加值的時候,如果存在滿員的情況,將選擇結點中的值作為新的索引,還有在刪除值的時候,索引中的關鍵字並不會刪除,也不會存在父親結點的關鍵字下沉的情況,因為那只是索引。

這都是由於b+樹和b具有這不同的儲存結構所造成的區別,以乙個m階樹為例。

關鍵字的數量不同;b+樹中分支結點有m個關鍵字,其葉子結點也有m個,其關鍵字只是起到了乙個索引的作用,但是b樹雖然也有m個子結點,但是其只擁有m-1個關鍵字。

儲存的位置不同;b+樹中的資料都儲存在葉子結點上,也就是其所有葉子結點的資料組合起來就是完整的資料,但是b樹的資料儲存在每乙個結點中,並不僅僅儲存在葉子結點上。

分支結點的構造不同;b+樹的分支結點僅僅儲存著關鍵字資訊和兒子的指標(這裡的指標指的是磁碟塊的偏移量),也就是說內部結點僅僅包含著索引資訊。

查詢不同;b樹在找到具體的數值以後,則結束,而b+樹則需要通過索引找到葉子結點中的資料才結束,也就是說b+樹的搜尋過程中走了一條從根結點到葉子結點的路徑。

B樹 B 樹 B 樹 B 樹 總結

b樹 1.所有非葉子結點至多擁有兩個兒子 left和right 2.所有結點儲存乙個關鍵字 3.非葉子結點的左指標指向小於其關鍵字的子樹,右指標指向大於其關鍵字的子樹 b樹的搜尋,從根結點開始,如果查詢的關鍵字與結點的關鍵字相等,那麼就命中 否則,如果查詢關鍵字比結點關鍵字小,就進入左兒子 如果比結...

關於B樹 B 樹 B 樹 總結

二叉搜尋樹 特點 1 所有非葉子節點最多2個孩子,廢話,二叉樹 2 所有節點,每個節點儲存乙個值 3 父親節點的左孩子樹的節點比它小,右孩子節點的值比它大。查詢 其實,我一下子想到的是二分查詢。先查詢根,如果相等則找到,如果大於要查詢的值,則查詢右孩子樹 因為右孩子數儲存的值比root大 如果小於要...

B樹,B 樹,B 樹,B 樹

小彰的部落格 b樹 即二叉搜尋樹 1.所有非葉子結點至多擁有兩個兒子 left和right 2.所有結點儲存乙個關鍵字 3.非葉子結點的左指標指向小於其關鍵字的子樹,右指標指向大於其關鍵字的子樹 如 b樹的搜尋,從根結點開始,如果查詢的關鍵字與結點的關鍵字相等,那麼就命中 否則,如果查詢關鍵字比結點...