數據結構---B樹總結

B樹總結
這裏的B樹,也就是英文中的B-Tree,一個 m 階的B樹滿足以下條件:
每個結點至多擁有m棵子樹;
根結點至少擁有兩顆子樹(存在子樹的情況下),根結點至少有一個關鍵字;
除了根結點以外,其餘每個分支結點至少擁有 m/2 棵子樹;
所有的葉結點都在同一層上,B樹的葉子結點可以看成是一種外部節點,不包含任何信息;
有 k 棵子樹的分支結點則存在 k-1 個關鍵碼,關鍵碼按照遞增次序進行排列;
關鍵字數量需要滿足ceil(m/2)-1 <= n <= m-1;

在這裏插入圖片描述
B樹的實際結構
Struct
Num parent d[0] [1] [2] [3] [4] [5]
S[0] [1] [2] [3] [4] [5]
在這裏插入圖片描述
B樹的應用:再文件系統中查找文件,以及數據庫中查找建立索引
倒排索引:如果要按多條非主鍵來查找,用空間換時間,將多條信息用二進制表示起來,與之後都爲1的則爲所查找
按主鍵來進行查找:
在這裏插入圖片描述
總大小比較大,查找時會經常性的引起磁盤和內存之間的切換,導致查詢效率低下
在這裏插入圖片描述
指向ID這條記錄的指針,雖然減少了很大的存儲空間,減少了磁盤和內存之間的速度差異
1、關鍵碼無序,查找速度慢
2、內存存儲數據是按照頁面(4k)來存儲,按照這樣的數據結構,關鍵碼很大機率不處於一個頁面,查詢時導致頁面來回切換(冷熱數據)消耗資源,效率不高

1、用B樹來存儲則效率很高,B樹查詢效率和二分查找效率等同,時間複雜度都是log(n)
2、B樹的每個樹按照頁面的大小來設計,在查找時,可以很大概率的命中,直接切換需要的頁面,不必因爲關鍵碼沒在一個頁面而來回切換頁面。
3、查找算法思想:從根節點的最後一個開始向前查找,找到返回(當前節點,以及數據的下標),找不到的話繼續遍歷接下來的節點,找到比當前查詢數據大的下標,繼續往下遍歷,未找到的話,也返回該節點的指針和數據下標,爲插入做準備
4、插入算法思想:如果根節點爲空或者頭結點爲空則直接返回。在樹中查找,找到的話直接返回。沒有找到的話進行接下來的操作。
(1)查找返回的是要插入的節點以及數據下標。先把數據放入到該節點要插入的位置。
(2)判斷當前節點的num是否maxsize,如果大於,則進行分裂。分成兩個數據,或者三個數據。
(3)創建新的節點,保存後三個數據。將後三個數據的第一個數據作爲根節點插入到根節點中去,如果由根節點,直接插入,沒有根節點,則新建一個根節點。
(4)插入完成之後,有可能調整後的根節點又num > maxsize
(5)在進行分裂,知道滿足B樹的性質爲止。

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

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