演算法導論B樹學習筆記

2021-10-22 06:23:06 字數 936 閱讀 6882

#定義就不重複說明了

b樹與b+樹的不同是,b+樹中非葉子節點的節點也會出現在葉子節點中

b樹要求至少t-1,至多2t-1

b樹一、插入

1、關於高度的定理

h ⩽l

ogtn

+1

2h\leqslant log_t \frac

h⩽logt

​2n+

1​2、**操作:

抽象出來就是插入到某個節點,滿了之後從中間**(之間除以2就行,不用考慮奇偶性),然後將中間的節點提上去

這個時候相當於上乙個節點插入了節點

具體實現,我想的是**的那個節點前一半指標和data不變,生成的新節點複製後一半的內容,然後後一半重置

所選擇的邏輯:先**再插入,**是優先中間靠右

3、遞迴過程之前的文章**現過(略)

二、刪除

核心想法,再進行刪除時,若刪除後節點的個數太少以至於不符合條件,我們就要進行再次調整

1、如果關鍵字k在x節點中,並且時葉子節點,則可以直接刪除該關鍵字

2、如果k不在節點x中,則我們先確定必包含k的子樹的根x.ci,則必須通過操作保證降至乙個至少包含t個關鍵字的節點

如果到了某個節點只有t-1個關鍵字,剛好不滿足:

操作:啊其實也還好,看siblings,如果sbling有至少t個的,則把這個換到父節點,把父節點的元素換乙個下來(注意大小關係,建議畫圖聯想)

如果說都是剛好t個,我們的操作時合併兩個節點(最小的乙個加上旁邊的剛好合適的),並且提乙個上去

3、若k在節點x中,並且x是內部節點:

(1)、若節點中先於k的(x是父節點)子節點y至少t個,那麼找出k在以y為根的子樹中的前驅k『,遞迴刪除k』

(2)、若z至少t個關鍵字,則對稱地,找出後繼k『,遞迴刪除

(3)、若y、z都只有t-1個,則合併yz兩者,這個時候不需要k了,k消失

《演算法導論》筆記 B樹

演算法 cc c 資料結構 b樹是平衡樹的一種,主要用於操作儲存在磁碟等二級儲存裝置上的大量資料。相比起記憶體 主存 來說,磁碟操作的速度非常慢 慢幾個數量級 所以涉及到儲存在磁碟的資料的時候,儘量減少磁碟的讀取和寫入操作對於提高操作速度是非常重要的。b樹就是針對這個特點進行設計以滿足相應要求的。b...

演算法導論 B樹

include include define t 3 typedef struct bnodetype bnode,pbnode typedef struct btree,pbtree typedef struct stype,pstype pbnode allocatenode void b tr...

演算法導論 B樹

這是為磁碟儲存而專門設計的一類平衡搜尋樹。由於磁碟訪問相對訪存極慢,因此度量b樹的效能,考慮 a.動態集合操作消耗的計算時間 b.執行了多少次的磁碟訪問。對每個b樹操作,磁碟訪問的次數隨著b樹的高度增加。b tree定義 第1.每個節點x有 a.x.n儲存節點x的關鍵字個數。b.x.n個關鍵字不嚴格...