資料結構之查詢(順序、折半、分塊查詢,B樹、B+樹)

summer_lm發表於2020-09-26

在這裡插入圖片描述

一、線性結構查詢

1、順序查詢
(1)無序的線性查詢
基本思想:從線性表的一端開始,逐個檢查關鍵字是否滿足給定的條件。特點:當N比較大時,查詢效率低。
在這裡插入圖片描述
(2)有序的線性查詢:查效率比無序查詢略高。

2、折半查詢
基本思想:折半查詢又稱二分查詢,僅適用於有序的順序表。將給定的值與表中間位置的元素比較,相等則查詢成功;不相等則繼續在中間元素以外的前半部分或後半部分繼續查詢;如此重複,直到找到為止,若沒有指定元素,則查詢失敗。
在這裡插入圖片描述
案例:
在這裡插入圖片描述
3、分塊查詢
基本思想:吸取了順序查詢和折半查詢各自的優點,既有動態結構,又適於快速查詢。將表分為若干子塊,塊內元素可以無序,塊之間必須是有序的。
案例:88、24、72、61、21、6、32、11、8、31、22、83、78、54
在這裡插入圖片描述

二、樹形結構查詢

1、B樹
B樹:又叫多路平衡查詢樹,B樹種所有結點的孩子個數的最大值稱為B樹的階,通常用m表示。B樹也是所有結點的平衡因子均等於0的多路平衡查詢樹。

(1)m叉樹的特性:

  • 1)樹中每個結點至多有m棵子樹,即至多含有m-1個關鍵字;
  • 2)若根節點不是終端結點,則至少有兩棵子樹;
  • 3)除根結點外的所有非葉節點至少有m/2棵子樹,至少有m/2-1個關鍵字;
  • 4)所有非葉結點的結構如下:
    在這裡插入圖片描述
  • 5)所有的葉結點都出現在同一層次上,並且不帶資訊

案例:
在這裡插入圖片描述
(2)B樹的高度範圍:
在這裡插入圖片描述
(3)B樹的用途
使用B-tree結構可以顯著減少定位記錄時所經歷的中間過程,從而加快存取速度。這個資料結構一般用於資料庫的索引,綜合效率較高。

(4)B樹的查詢
B樹的查詢:類似二叉排序樹的查詢,不同的是B樹每個結點上是有多個關鍵字的有序表,在到達某個結點時,先在有序表中查詢,若找到,則查詢成功;否則,到按照對應的指標資訊指向的子樹中去查詢,當到達葉子結點時,則說明樹中沒有對應的關鍵碼。
案例:
在這裡插入圖片描述

  • 1)首先從根節點a開始,因為 a 節點中只有一個關鍵字35,且給定值47 > 關鍵字35,則若存在必在指標A1所指的子樹內。
  • 2)順指標找到 c節點,該節點有兩個關鍵字(43和 78),而43 < 47 < 78,若存在比在指標A1所指的子樹中。
  • 3)同樣,順指標找到 g節點,在該節點找到關鍵字47,查詢成功。

(4)B樹的插入(可能涉及結點的分裂)
案例:3階B樹,假設需依次插入關鍵字30,26,85。
在這裡插入圖片描述

  • 1)首先通過查詢確定插入的位置。由根節點a開始查詢,確定30應插入的在d 節點中。由於d 中關鍵字數目不超過2(即m-1),故第一個關鍵字插入完成:如圖(b)
    在這裡插入圖片描述
  • 2)同樣,通過查詢確定關鍵字26亦應插入 d, 由於d節點關鍵字數目超過2,此時需要將 d分裂成兩個節點,關鍵字26及其前、後兩個指標仍保留在 d 節點中。而關鍵字37 及其前、後兩個指標儲存到新的產生的節點 d中。同時將關鍵字30 和指示節點 d的指標插入到其雙親的節點中。由於 b節點中的關鍵字數目沒有超過2,則插入完成.如圖(c)(d)
    在這裡插入圖片描述
    在這裡插入圖片描述
  • 3) (e) -(g) 為插入85後;
    在這裡插入圖片描述
    在這裡插入圖片描述
    在這裡插入圖片描述

(5)B樹的刪除(可能涉及結點的合併操作)

  • 1)被刪關鍵字K不在終端結點,可以用K的前驅或後繼k來替代K,然後在相應的結點中刪除k,關鍵字k必定落在某個終端結點中。
    在這裡插入圖片描述
  • 2)被刪的關鍵字在終端結點中,有三種情況:
    a、直接刪除關鍵字:若被刪關鍵字所在結點的關鍵字個數≥m/2,則可直接刪除關鍵字;
    b、兄弟夠借:若被刪關鍵字所在結點的關鍵字個數=m/2-1,且與此節點相鄰的兄弟結點的關鍵字個數≥m/2,則需要調整該結點、兄弟結點及其雙親結點,以達到新的平衡;
    在這裡插入圖片描述
    c:兄弟不夠借:若被刪關鍵字所在結點的關鍵字個數=m/2-1,且與此節點相鄰的兄弟結點的關鍵字個數均=m/2-1,則將關鍵字刪除後與兄弟節點及其雙親節點中的關鍵字合併。
    在這裡插入圖片描述

2、B+樹
在這裡插入圖片描述
(1)B+樹的特徵以及與B樹的差別

在這裡插入圖片描述
(2)每個葉子節點都有一個指標,指向下一個資料,形成一個有序連結串列。而只有葉子節點才會有data,其他都是索引。

(3)B+樹的插入
案例:階數為5。

  • a)空樹中插入5。
    在這裡插入圖片描述

  • b)依次插入8,10,15,16。
    在這裡插入圖片描述
    插入16後產生分裂:
    在這裡插入圖片描述

  • c)插入17,18
    在這裡插入圖片描述
    插入18後產生分裂:
    在這裡插入圖片描述

  • d) 插入幾個資料後。
    在這裡插入圖片描述

  • e)再繼續插入7。
    在這裡插入圖片描述
    在這裡插入圖片描述
    最終的分裂結果:
    在這裡插入圖片描述

三、雜湊表

相關文章