【原理思路】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-樹刪除類似,當葉子結點中最大關鍵字被刪除時,內結點的該最大關鍵字可作為分解關鍵字而存在;