查詢演算法整理之索引查詢

2021-06-07 11:23:19 字數 1604 閱讀 7886

索引查詢是在索引表和主表(即線性表的索引儲存結構)上進行的查詢。

索引查詢的過程是: 1)

首先根據給定的索引值k1,在索引表上查詢出索引值等於ki的索引項,以確定對應予表在主表中的開始位置和長度, 2)

然後再根據給定的關鍵字k2,茬對應的子表中查詢出關鍵字等於k2的元素(結點)。對索引表或子表進行查詢時,若表是順序儲存的有序表,則既可進行順序查詢,也可進行二分查詢,否則只能進行順序查詢。

一提到「索引」,估計大家第一反應就是「資料庫索引」,對的,其實主鍵建立「索引」,就是方便我們在海量資料中查詢。

實現索引查詢時常使用的三個術語: 1)

主表:這個很簡單,要查詢的物件。 2)

索引項:一般我們會用函式將乙個主表劃分成幾個子表,每個子表建立乙個索引,這個索引叫做索引項。 3)

索引表:索引項的集合也就是索引表。

一般「索引項」包含三種內容:index,start,length

第一:index,也就是索引指向主表的關鍵字。

第二:start,也就是index在主表中的位置。

第三:length, 也就是子表的區間長度。

**實現:

public class indexsearch ;

// 索引表

static indexitem indexitem = ;

// 查詢資料

public static int indexsearch(int key)

} // 如果item為null,則說明在索引中查詢失敗

if (item == null)

return -1;

for (int i = item.start; i < item.start + item.length; i++)

} return -1;

} // / 插入資料

public static int insert(int key)

} if (item == null)

return -1;

// 更新主表

students[item.start + item.length] = key;

// 更新索引表

indexitem[i].length++;

return 1;

} public static void main(string args) }}

// 索引項實體

class indexitem

public indexitem(int index, int start, int length)

}執行結果:

原資料為:[101, 102, 103, 104, 105, 0, 0, 0, 0, 0, 201, 202, 203, 204, 0, 0, 0, 0, 0, 0, 301, 302, 303, 0, 0, 0, 0, 0, 0, 0]

插入後資料:[101, 102, 103, 104, 105, 0, 0, 0, 0, 0, 201, 202, 203, 204, 205, 0, 0, 0, 0, 0, 301, 302, 303, 308, 0, 0, 0, 0, 0, 0]

資料元素:205在陣列中的位置為 14位

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

有時候,可能會遇到這樣的表 整個表中的元素未必有序,但若劃分為若干塊後,每一塊中的所有元素均小於 或大於 其後面塊中的所有元素。我們稱這種為分塊有序。首先,我們需要先建立乙個索引表,索引表中為每一塊都設定 索引項,每乙個索引項都包含兩個內容 在前面建立的索引表的基礎上,我們查詢乙個關鍵字需要兩個步驟...

基礎演算法 查詢 線性索引查詢(I)

前面介紹的幾種查詢的演算法都是基於資料有序的基礎上進行的。但是在實際的應用中,很多資料集可能有驚人的資料量,面對這些海量的資料,要保證記錄全部按照當中的某個關鍵字有序,其時間代價是非常昂貴的,所以這種資料通常都是按先後順序儲存的。那麼如何能夠快速的查詢到需要的資料呢?辦法就是 索引。索引就是把乙個關...

查詢演算法之折半查詢

binary search 折半查詢又稱二分查詢,要求資料序列呈線性結構,即先排序,在查詢。可以明顯的提高查詢速度,其流程如下 預設陣列為a 需查詢的值為x 首先設定3個變數low mid high,分別儲存陣列元素開始 中間和末尾元素的序號。接著進行以下判斷。1 如果陣列中序號為mid的值與需查詢...