乙個m階的b樹具有如下幾個特徵:
(1)定義任意非葉子結點最多只有m個兒子,且m>2;
(2)根結點的兒子數為[2, m];
(3)除根結點以外的非葉子結點的兒子數為[m/2, m],向上取整;
(4)非葉子結點的關鍵字個數=兒子數-1;
(5)所有葉子結點位於同一層,且不帶資訊(實際上為null)
(6)k個關鍵字把節點拆成k+1段,分別指向k+1個兒子,同時滿足查詢樹的大小關係
這是考研資料結構考試大綱的乙個考點
(1)查詢
類似於二叉查詢樹:如上圖三叉b樹所示,如果關鍵字比18小,往左邊找,如果比30大往右邊找,在18-30直接,在中間找。
(2)插入
1.定位,找到最底層,比如說插入40
已經插入成功了
但是插入60,改變了b樹的性質(3階b樹乙個節點最多只能有m-1=2個關鍵字)
2.**結點
中間的數字上移
節點**
(3)刪除很複雜
b+樹是b樹的一種變體,有著比b樹更高的查詢效能
b+樹在考研中只要求會概念,不要求會他的增刪改查
b+樹的特徵:
1.有k個子樹的中間節點包含有k個元素(b樹中是k-1個元素),每個元素不儲存資料,只用來索引,所有資料都儲存在葉子節點。
2.所有的葉子結點中包含了全部元素的資訊,及指向含這些元素記錄的指標,且葉子結點本身依關鍵字的大小自小而大順序鏈結。
3.所有的中間節點元素都同時存在於子節點,在子節點元素中是最大(或最小)元素。
b+樹比b樹的優勢有三個:
1、單一節點儲存更多的元素,使得查詢的io次數減少;
2、所有查詢都要查詢到葉子節點,查詢效能穩定;
3、所有葉子節點形成有序鍊錶,便於範圍查詢。
設計動機
彌合不同的儲存級別之間的訪問速度上的巨大差異,實現高效的 i/o
事實實踐中 : 系統儲存容量的增長速度 << 應用問題規模的增長速度
b樹是儲存關鍵碼的詞條結構,比普通的 bst 更寬,更矮 !也稱之為平衡多路搜尋樹
**出現的背景:**平衡二叉樹的查詢效率是非常高的,並可以通過降低樹的深度來提高查詢的效率。但是當資料量非常大,樹的儲存的元素數量是有限的,這樣會導致二叉查詢樹結構由於樹的深度過大而造成磁碟i/o讀寫過於頻繁,進而導致查詢效率低下。另外資料量過大會導致記憶體空間不夠容納平衡二叉樹所有結點的情況。b樹是解決這個問題的很好的結構
採用多叉樹結構(由於樹節點元素數量是有限的,自然該節點的子樹數量也就是有限的)。
(1)檔案系統和資料庫的索引都是存在硬碟上的,並且如果資料量大的話,不一定能一次性載入到記憶體中。
資料庫中的索引一般是在磁碟上,資料量大的情況可能無法一次裝入記憶體,b+樹的設計可以允許資料分批載入,同時樹的高度較低,提高查詢效率。
樹的路(分叉)越多,那麼i/o的效率也越高,但是如果分叉接近無限大,那麼就退化成有序陣列,這樣的i/o效率是最高的,但是對記憶體的負載也特別大,
(2)b樹需要做區域性的中序遍歷,可能要跨層訪問。而b+樹由於所有資料都在葉子結點,不用跨層。同時由於有鍊錶結構,只需要找到首尾,通過鍊錶就能把所有資料取出來了。
(3)和業務場景有關
如果只選乙個資料,那確實是hash更快。但是資料庫中經常會選擇多條,這時候由於b+樹索引有序,並且又有鍊錶相連,它的查詢效率比hash就快很多。
資料結構 B樹與B 樹
b樹 多路平衡查詢樹 b 樹 由二叉查詢樹進化而來 m叉查詢樹 由分塊查詢進化而來 多級分塊查詢 根節點的關鍵字範圍 1,m 1 根節點的關鍵字範圍 2,m n個關鍵字對應n 1個分支 n個關鍵字對應n個分支 關於分支是一樣的 根節點分支數範圍 2,m 除根節點外,其他節點數範圍 m 2,m 所有節...
資料結構 四 B樹 B 樹 B 樹 B 樹
b樹 即二叉搜尋樹 1.所有非葉子結點至多擁有兩個兒子 left和right 2.所有結點儲存乙個關鍵字 3.非葉子結點的左指標指向小於其關鍵字的子樹,右指標指向大於其關鍵字的子樹 如 b樹的搜尋,從根結點開始,如果查詢的關鍵字與結點的關鍵字相等,那麼就命中 否則,如果查詢關鍵字比結點關鍵字小,就進...
資料結構之B樹 B 樹 B 樹 B 樹
b 樹b 樹 b b b 樹是為了磁碟或其它儲存裝置而設計的一種平衡多路查詢樹 相對於二叉,b樹每個內節點有多個分支 與紅黑樹相比,在相同的的節點的情況下,一顆b樹的高度遠遠小於紅黑樹的高度.b樹上操作的時間通常由訪問磁碟的時間和cpu計算時間這兩部分構成,而cpu的速度非常快,所以b樹的操作效率取...