分塊索引(查詢)

2021-08-07 18:47:13 字數 1522 閱讀 5523

什麼叫做分塊索引?

分塊索引就是對資料集進行分塊,使得分塊有序,然後再對每一塊建立乙個索引項,從而減少索引項個數。

分塊查詢是折半查詢和順序查詢的一種改進方法,折半查詢雖然具有很好的效能,但其前提條件時線性表順序儲存而且按照關鍵碼排序,這一前提條件在結點樹很大且表元素動態變化時是難以滿足的。而順序查詢可以解決表元素動態變化的要求,但查詢效率很低。如果既要保持對線性表的查詢具有較快的速度,又要能夠滿足表元素動態變化的要求,則可採用分塊查詢的方法。

特點:

塊內無序、塊間有序
索引項結構:

最大關鍵碼、塊中個數、指向塊首指標

查詢步驟:

1、在分塊索引表中查詢關鍵字所在的塊

2、根據塊首指標找到相應的塊

平均查詢長度asl:

假設有n個記錄平均分為m塊,每塊有t條記錄

1、索引表平均查詢長度為(m+1)/2

2、塊內平均查詢長度為(n+1)/2

3、總的查詢長度為1/2(n/t+t) +1

最佳情況:

m=t

此時asl = √n + 1(比順序查詢的o(n))提高不少

但是比折半查詢的o(logn)相比還有不小的差距

改進空間:

因為塊間有序,塊間可以用折半、插值來提高手段
注意事項:

需要注意的是,當節點變化很頻繁時,可能會導致塊與塊之間的節點數相差很大,某些具有很多節點,而另一些塊則可能只有很少節點,這將會導致查詢效率的下降。
以下是具體的實現**:

#include 

struct index /*定義塊的結構*/

index_table[4]; /*定義結構體陣列*/

int block_search(int key, int a) /*自定義實現分塊查詢*/

main()

printf("please input the number which do you want to search:\n");

scanf("%d", &key); /*輸入要查詢的數值*/

k = block_search(key, a); /*呼叫函式進行查詢*/

if (k != 0)

printf("success.the position is :%d\n", k); /*如果找到該數,則輸出其位置*/

else

printf("no found!"); /*若未找到則輸出提示資訊*/

}

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

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

查詢 索引結構和分塊查詢

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

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

索引儲存結構 索引儲存結構 資料表 索引表 索引表 index blocked table 中的每一項稱為索引項,索引項的一般形式 關鍵字,位址 舉個例子 分塊查詢的基本思想 分塊查詢又稱分塊索引查詢 index blocked search 是一種介於順序查詢和二分查詢之間的查詢方法。其基本思想是...