你心裡有沒有點B樹?

2021-10-24 07:20:33 字數 2560 閱讀 9310

b樹,是一種多路平衡搜尋樹,多用於檔案系統、資料庫的實現。b樹中所有節點擁有的子節點數(指標數)的最大值稱為b樹的階,如3階b樹他的子節點個數最大為3個。

可以通過這個視覺化資料結構**自己對照模擬一遍,會更容易掌握的。選擇b trees,就可以進入到頁面建立b樹了,選擇相應的階數即可。點這裡,進入視覺化資料結構**

b樹有以下特點:

1.每個節點可以儲存多個元素(n)、可以擁有多個子節點(n + 1)

2.擁有二叉樹的一些性質,元素都是有序的;

3.極度平衡,每個節點的所有子樹的高度一致;

4.整個樹的高度非常矮,儲存元素個數也非常多;

m階b數的性質:

1.m階b樹滿足以下性質;

2.根節點的元素個數必須1 <= x <= m - 1

3.非根節點的元素個數必須為┌ m / 2 ┐ - 1 <= x <= m - 1 (┌ ┐向上取整)

4.如果乙個節點中的元素個數為x,並且有子節點,那麼子節點個數為y = x + 1那麼作為根節點的子節點個數為2 <= y <= m,作為非根節點的子節點個數為┌ m / 2 ┐ <= y <= m

b樹的搜尋步驟和二叉搜尋樹類似:

1.先從節點內從小到大開始搜尋元素;

2.如果命中,搜尋結束;

3.如果未命中,在去對應的子節點中搜尋元素,重複1,2步驟;

b樹的新增,新新增的元素必定是新增到葉子節點上,如果葉子節點上的元素個數滿足m階b樹的性質,那麼就符合條件無需處理。但是如果插入到葉子節點上的個數超過b樹的階數,那麼需要進行上溢處理。

上溢解決(上溢節點的個數必定等於m):

1.找出產生上溢的那個節點最中間的位置的元素b;

2.將b位置的元素向上與父節點進行合併;

3.然後將[0,b - 1][b + 1,m]位置的元素**成兩個子節點,作為上溢元素的左右子節點;

4.檢查父節點是否發生上溢,如果父節點發生上溢,那麼執行1,2,3步驟,直到上溢問題解決;

b樹的刪除操作,如果刪除的元素在葉子節點,那麼直接刪除即可。如果刪除元素在非葉子節點,那麼需要以下步驟:

1.先找到他的前驅或後繼元素,覆蓋所需要刪除的元素值;

2.在把前驅或後繼元素刪除;

由此可知,不管是葉子節點刪除,還是非葉子節點刪除。真正的刪除元素都是發生在葉子節點上。如果在刪除葉子節點的時候,節點的元素數量為┌ m / 2 ┐ - 1,那麼需要進行下溢操作,下溢節點的元素數量必然等於┌ m / 2 ┐ - 2.

下溢解決:

1.如果下溢節點臨近的兄弟節點,有至少┌ m / 2 ┐個元素,可以向其借乙個元素a,然後將其父節點的元素b插入到下溢節點的0位置,把元素a替換到父節點元素b的位置 (旋轉操作);

2.如果臨近的兄弟節點,只有┌ m / 2 ┐ - 1個元素,那麼將父節點的元素b挪下來跟左右子節點進行合併,並且非常巧妙的是合併的元素個數為┌ m / 2 ┐ + ┌ m / 2 ┐ - 2不會超過m - 1,這個操作可能會導致父節點產生下溢 ,然後嘗試執行1,2步操作。

你有沒有重視過視覺入侵

視覺入侵是指對肉眼直接可見的資訊進行記錄的黑客攻擊手段。機構往往花費鉅款,搭建針對關鍵網路的防禦系統,卻在防護視覺入侵方面毫無作為。波耐蒙研究所 ponemon institute 最近對此問題開展了一項調查。結果顯示,使用低技術手段進行視覺入侵的成功率接近九成 88 研究所僱傭了一位負責滲透測試的...

你有沒有為夢想努力過?

每乙個人,我相信,在人生的某個階段,都有夢想,而且往往它是不斷變化的。原因有以下幾點 但是不知從何時起,這個詞彙漸漸從我們的生活中消失。消失的並不是我們的想法,而是我們的熱情。沒有一帆風順的人生,只有一成不變的生活。時間是最好的良藥,卻也是最好的砂紙。它撫平了我們的創傷,也磨平了我們的鬥志。生活的不...

你心裡沒點B樹,不懂索引,怎麼去面試?

認識自己的無知是認識世界最可靠的方法 開局一張圖 做個實驗 問問你周邊的小夥伴 索引是什麼?我周邊的小夥伴是下面的表情,平時在用的時候大部分人都知道它能夠加速查詢,但是至於定義嘛,往往被忽略。mysql官方 索引 index 是幫助mysql高效獲取資料的一種資料結構。mysql的查詢本質也就是找資...