數據結構與算法(五)檢索(查找)基本算法

概念

  • 檢索表:待查找的數據容器,例如線性表、樹表(樹、二叉樹、B/B+樹)等
  • 關鍵字:key
  • 關鍵字值:key對應的value
  • 檢索/查找:Search

1. 線性表的檢索

1.1 順序檢索

可用於所有線性表,包括順序表和鏈表。

1.2 二分法檢索

只能用於順序表(數組)。

1.2.1 黃金分割點檢索

與二分法檢索類似,但是分割檢索區間的方式不同;二分法以二等分的方式分割檢索區間,黃金分割點以0.618比例方式分割檢索區間

1.3 精算點檢索

如果檢索表是有序而且分佈均勻的,可通過計算估算檢索位置。只能用於順序表。

1.3 分塊檢索

是順序檢索的一種改進方法。效率介於順序檢索和二分查找之間。分塊檢索不要求檢索表中所有記錄關鍵字有序排列,但要求把檢索表分成若干塊,並且各塊之間按key大小有序。即塊間有序、塊內無序。

1.4 跳躍表

又叫跳錶,一種基於有序鏈表的擴展,具有二分查找的查找效率,又具有鏈表的插入/刪除效率。

2. 樹表的檢索

2.1 二叉檢索樹/二叉查找樹(BST:Binary Search Tree)

  • 是一個二叉樹
  • 左子樹不空,則左子樹上所有結點的值小於根結點的值
  • 右子樹不空,則右子樹上所有結點的值大於根結點的值
  • 查找時比較次數不超過樹的深度

2.1.1 平衡二叉樹/AVL樹

平衡因子的絕對值不超過1的二叉樹(網上查到都是說平衡二叉樹是二叉檢索樹)。

平衡因子:該結點的左子樹深度減去右子樹深度的差

  • 插入或刪除結點可能導致不平衡,需要調整

2.2 B樹/B+樹

B樹是一種平衡的多路檢索樹(平衡N叉檢索樹)

B樹的特點:

  • 一個結點最多有N-1個鍵(key)
  • 一個結點最多有N棵子樹
  • 除根結點外,所有非終端結點至少有[N+1/2]棵子樹

B+樹的特點:

  • 是一種B樹的變形樹
  • 有n棵子樹的結點含有n個鍵(key)
  • 節點的每個鍵是對應子樹的最大(或最小)鍵
  • 所有葉子結點包含了全部鍵的信息

3. 哈希檢索

前兩種檢索方式,鍵在檢索表中的位置都是隨機的,或者說是相對的,與其鍵(key)不存在某種確定的關係。
哈希檢索是一種直接利用鍵來確定記錄在檢索表中位置的技術。

  • 哈希函數
  • 哈希地址衝突(collision)

3.1 地址衝突的消解策略

在數據插入時,可能發生插入的位置已經存在數據,即有地址衝突。如何解決這個問題?

3.1.1 開發定址法

從插入的位置開始,查找一個最近的空地址用於存儲記錄。

  1. 線性探查法
    將哈希表看作是環形表,從當前地址往後查:(d+1)%m、(d+2)%m…,m爲哈希表的長度
  2. 平方查找法
    以(d+i)%m的方式查,i取值:12 , -12 , 22 , -22
  3. 隨機探查法
    選取隨機數作爲地址位移來計算下一個地址

3.1.2 拉鍊法

將哈希地址相同的鍵的記錄鏈接到同一個單鏈表中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章