分塊查找


分塊查找(Blocking Search)又稱索引順序查找。它是一種性能介於順序查找和二分查找之間的查找方法。

1、 二分查找表存儲結構
     二分查找表由"分塊有序"的線性表和索引表組成。
(1)"分塊有序"的線性表
     表R[1..n]均分為b塊,前b-1塊中結點個數為  ,第b塊的結點數小於等於s;每一塊中的關鍵字不一定有序,但前一塊中的最大關鍵字必須小於后一塊中的最小關鍵字,即表是"分塊有序"的。

(2)索引表
     抽取各塊中的最大關鍵字及其起始位置構成一個索引表ID[l..b],即:
ID[i](1≤i≤b)中存放第i塊的最大關鍵字及該塊在表R中的起始位置。由於表R是分塊有序的,所以索引表是一個遞增有序表。
       
2、分塊查找的基本思想
  分塊查找的基本思想是:
(1)首先查找索引表
  索引表是有序表,可采用二分查找或順序查找,以確定待查的結點在哪一塊。

(2)然后在已確定的塊中進行順序查找
   由於塊內無序,只能用順序查找。
 
3、算法分析
(1)平均查找長度ASL
  分塊查找是兩次查找過程。整個查找過程的平均查找長度是兩次查找的平均查找長度之和。
①以二分查找來確定塊,分塊查找成功時的平均查找長度
      ASLblk=ASLbn+ASLsq≈lg(b+1)-1+(s+1)/2≈lg(n/s+1)+s/2

②以順序查找確定塊,分塊查找成功時的平均查找長度
      ASL'blk=(b+1)/2+(s+1)/2=(s2+2s+n)/(2s)
  注意:
    當 s= 時ASL'blk取極小值 +1 ,即當采用順序查找確定塊時,應將各塊中的結點數選定為 。
  【例】若表中有10000個結點,則應把它分成100個塊,每塊中含100個結點。用順序查找確定塊,分塊查找平均需要做100次比較,而順序查找平均需做5000次比較,二分查找最多需14次比較。
  注意:

  分塊查找算法的效率介於順序查找和二分查找之間。

(2)塊的大小

  在實際應用中,分塊查找不一定要將線性表分成大小相等的若干塊,可根據表的特征進行分塊。
  【例】一個學校的學生登記表,可按系號或班號分塊。

(3) 結點的存儲結構

  各塊可放在不同的向量中,也可將每一塊存放在一個單鏈表中。
  
(4)分塊查找的優點

  分塊查找的優點是:
  ①在表中插入或刪除一個記錄時,只要找到該記錄所屬的塊,就在該塊內進行插入和刪除運算。
  ②因塊內記錄的存放是任意的,所以插入或刪除比較容易,無須移動大量記錄。
  分塊查找的主要代價是增加一個輔助數組的存儲空間和將初始表分塊排序的運算。

 

轉:http://student.zjzk.cn/course_ware/data_structure/web/chazhao/chazhao9.2.3.htm


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM