索引儲存結構和分塊 索引 查詢

2021-10-07 21:40:56 字數 1573 閱讀 3796

索引儲存結構

索引儲存結構=資料表+索引表

索引表(index blocked table)中的每一項稱為索引項,索引項的一般形式:(關鍵字,位址)

舉個例子:

分塊查詢的基本思想

分塊查詢又稱分塊索引查詢(index blocked search)是一種介於順序查詢和二分查詢之間的查詢方法。其基本思想是:

(1)將資料表str[0…n-1]均分為b塊,前b-1塊中記錄個數為s=n/b,最後一塊即第b塊的記錄數小於等於s;

(2)每一塊中的關鍵字不一定有序,但前一塊中的最大關鍵字必須小於後一塊中的最小關鍵字,即要求表是「分塊有序」的;

(3)抽取各塊中的最大關鍵字及其起始位置構成乙個索引表idx[0…b-1],即idx[i](0≤i≤b-1)中存放著第i塊的最大關鍵字及該塊在表r中的起始位置。由於表r是分塊有序的,所以索引表是乙個遞增有序表。

舉個例子:設有乙個線性表,其中包含25個記錄,其關鍵字序列為:8,14,6,9,10,22,34,18,19,31,40,38,54,66, 46,71,78,68,80,85, 100, 4,88,96,87。假設將25個記錄分為5塊,每塊中有5個記錄,該線性表的索引儲存結構如下圖所示。

分塊查詢的演算法基本上是順序查詢和二分查詢的結合體。讀者體會一下下面**:

#include

#define max 30

//改

#define keytype int

//改

#define infotype char

//改

typedef

struct

nodetype;

typedef nodetype seqlist[max]

;typedef

struct

idxtype;

typedef idxtype idx[max/5]

;//索引表型別

intindexsearch

(idx i,

int m,seqlist str,

int n,keytype e)

if(low

printf

("%3d"

,str[i]

.key)

;printf

("\n比較%d次,在順序表中查詢元素%d\n"

,count2+

1,e);if

(i<=i[low]

.link+num-1)

return i;

else

return-1

;}return-1

;}

分塊查詢的查詢長度不僅和表的長度有關,而且和子表的個數有關。其時間複雜度介於兩者之間,一般比順序查詢快,比折半查詢慢。分塊查詢適用於搜尋引擎、系統維護等方面。

查詢 索引結構和分塊查詢

all right resvered 檔名稱 分塊查詢.cpp 作 者 鄭兆涵 查詢 索引結構和分塊查詢 問題實現分塊查詢,並分析相關 程式設計 分塊查詢函式實現 include define maxl 100 資料表的最大長度 define maxi 20 索引表的最大長度 typedef int...

分塊索引(查詢)

什麼叫做分塊索引?分塊索引就是對資料集進行分塊,使得分塊有序,然後再對每一塊建立乙個索引項,從而減少索引項個數。分塊查詢是折半查詢和順序查詢的一種改進方法,折半查詢雖然具有很好的效能,但其前提條件時線性表順序儲存而且按照關鍵碼排序,這一前提條件在結點樹很大且表元素動態變化時是難以滿足的。而順序查詢可...

索引順序查詢(分塊查詢)

索引順序查詢又叫分塊查詢,它是介於順序查詢和折半查詢之間的一種查詢方法。折半查詢雖然具有很好的效能,但其前提條件是線性表順序儲存而且按照關鍵字排序,這一前提條件在結點數很大且表元素動態變化時難以滿足。而順序查詢雖然可以解決表元素動態變化的要求,但查詢效率很低。如果既要保持查詢效率,又要能夠滿足表元素...