1. 程式人生 > >【原理思路】B+樹原理

【原理思路】B+樹原理

B+樹,是B-樹的變形,是為檔案系統需要而設計的一種平衡查詢樹;

B+樹定義:

每一個結點含有如下內容或滿足的規則:

(1)指標域:存放指向資料的指標,也可以與關鍵字存放在一起;

(2)key_number當前儲存在結點x中的關鍵字數;

(3)key[key_number]key中存放key_number個關鍵字,鍵值非降序排列;

(4)is_leaf如果當前節點是葉子結點,則is_leaf為true,否則為false,是個內結點;

(5)p[key_number]:每一個內結點含有key_number個指標,若為葉結點,無該域;

(6)每一個結點都具有相同的深度;

(7)指標子女的個數與關鍵字個數相同,定義最小度數為t,則每一個非根結點中至少含有t-1個關鍵字,即至少含有t-1個指標子女;至多含有2t-1個關鍵字,即至多含有2t-1個指標子女;

(8)葉子結點中包含了所有的關鍵字資訊,以及指向含有這些關鍵字記錄的指標,從小到大順序連結

(9)所有葉子結點都增加一個連結指標;

(10)非葉子結點的子樹指標p[i],指向關鍵字值屬於[K[i], K[i+1])的子樹,是索引部分,結點中含有子樹的最大關鍵字(也可以定義成最小),如下圖所示是最大關鍵字的情況;


B+樹查詢關鍵字:

(1)支援隨機查詢和順序查詢;隨機查詢時在遇到內結點上的關鍵字等於給定值時,並不終止,要一直查詢到葉子結點處,因此無論查詢成功與否,隨機查詢過程都走了一整條從根節點到葉子結點的過程;

(2)隨機查詢時間複雜度為O(tlogt(n)),空間複雜度為O(1);

(3)順序查詢時間複雜度為O(n),空間複雜度為O(1);

B+樹插入關鍵字:

(1)B+樹的插入關鍵字只在葉子結點上進行;

(2)原理與B-樹插入類似,當葉子結點分裂時,它們的雙親結點需要同時包含這兩個子葉子結點的關鍵字最大值;

B+樹刪除關鍵字:

(1)B+樹的刪除關鍵字只在葉子結點上進行;

(2)原理與B-樹刪除類似,當葉子結點中最大關鍵字被刪除時,內結點的該最大關鍵字可作為分解關鍵字而存在;