1. 程式人生 > >索引順序表查詢演算法(分塊查詢演算法)

索引順序表查詢演算法(分塊查詢演算法)

演算法背景

有時候,可能會遇到這樣的表:整個表中的元素未必有序,但若劃分為若干塊後,每一塊中的所有元素均小於(或大於)其後面塊中的所有元素。我們稱這種為分塊有序

對於分塊有序表的查詢

首先,我們需要先建立一個索引表,索引表中為每一塊都設定–索引項,每一個索引項都包含兩個內容:

  • 該塊的起始地址
  • 該塊中最大(或最小)的元素

    顯然,索引表是按關鍵字遞增或遞減次序排列的。如下圖所示:
    這裡寫圖片描述

查詢過程

在前面建立的索引表的基礎上,我們查詢一個關鍵字需要兩個步驟:

  1. 在索引表中查詢,目的是找出關鍵所屬的塊的位置。這裡如果索引表較大的話,可以採用折半查詢。
  2. 進入該塊中,使用簡單順序表查詢演算法進行關鍵字查詢。

演算法分析

這種帶索引表的分塊有序表查詢的時間效能取決於兩步查詢時間之和:如前面所述,第一步可以採用簡單順序查詢和折半查詢之一進行。第二步只能採用簡單順序查詢,但由於子表的長度較原表的長度小。因此,其時間效能介於順序查詢和折半查詢之間。