查詢 資料結構

2021-08-27 02:39:35 字數 2965 閱讀 6849

幾種查詢演算法:順序查詢,折半查詢,分塊查詢,雜湊表

一、順序查詢的基本思想:

從表的一端開始,向另一端逐個按給定值kx 與關鍵碼進行比較,若找到,查詢成功,並給出資料元素在表中的位置;若整個表檢測完,仍未找到與kx 相同的關鍵碼,則查詢失敗,給出失敗資訊。

說白了就是,從頭到尾,乙個乙個地比,找著相同的就成功,找不到就失敗。很明顯的缺點就是查詢效率低。

【適用性】:適用於線性表的順序儲存結構和鏈式儲存結構。

平均查詢長度=(n+1)/2.

【順序查詢優缺點】:

缺點:是當n 很大時,平均查詢長度較大,效率低;

優點:是對錶中資料元素的儲存沒有要求。另外,對於線性鍊錶,只能進行順序查詢。

二、有序表的折半查詢基本思想:

在有序表中,取中間元素作為比較物件,若給定值與中間元素的關鍵碼相等,則查詢成功;若給定值小於中間元素的關鍵碼,則在中間元素的左半區繼續查詢;若給定值大於中間元素的關鍵碼,則在中間元素的右半區繼續查詢。不斷重複上述查詢過程,直到查詢成功,或所查詢的區域無資料元素,查詢失敗。

【步驟】

① low=1;high=length; // 設定初始區間

② 當low>high 時,返回查詢失敗資訊// 表空,查詢失敗

③ low≤high,mid=(low+high)/2; //確定該區間的中點位置

a. 若kxtbl.elem[mid].key,low = mid+1; 轉② // 查詢在右半區進行

c. 若kx=tbl.elem[mid].key,返回資料元素在表中位置// 查詢成功

有序表按關鍵碼排列如下:

7,14,18,21,23,29,31,35,38,42,46,49,52

在表中查詢關鍵碼為14 的資料元素:

【演算法實現】

int binary_search(elemtype a, elemtype kx, int length)

}return flag;

}

【效能分析】平均查詢長度=log2(n+1)-1從折半查詢過程看,以表的中點為比較物件,並以中點將表分割為兩個子表,對定位到的子表繼續這種操作。所以,對錶中每個資料元素的查詢過程,可用二叉樹來描述,稱這個描述查詢過程的二叉樹為判定樹。

(7,14,18,21,23,29,31,35,38,42,46,49,52)折半查詢的判定樹

可以看到,查詢表中任一元素的過程,即是判定樹中從根到該元素結點路徑上各結點關鍵碼的比較次數,也即該元素結點在樹中的層次數。對於n 個結點的判定樹,樹高為k,則有2k-1 -1接下來討論折半查詢的平均查詢長度。為便於討論,以樹高為k 的滿二叉樹(n=2k-1)為例。假設表中每個元素的查詢是等概率的,即pi= ,則樹的第i 層有2i-1 個結點,因此,折半查詢的平均查詢長度為:

所以,折半查詢的時間效率為o(log2n)。注:

雖然折半查詢的效率高,但是要將表按關鍵字排序。而排序本身是一種很費時的運算,所以二分法比較適用於順序儲存結構。為保持表的有序性,在順序結構中插入和刪除都必須移動大量的結點。因此,折半查詢特別適用於那種一經建立就很少改動而又經常需要查詢的線性表。

三、分塊查詢(索引查詢)的基本思想:

分塊查詢又稱索引順序查詢,是對順序查詢的一種改進。分塊查詢要求將查詢表分成 若干個子表,並對子表建立索引表,查詢表的每乙個子表由索引表中的索引項確定。索引 項包括兩個字段:關鍵碼字段(存放對應子表中的最大關鍵碼值) ;指標字段(存放指向對 應子表的指標) ,並且要求索引項按關鍵碼字段有序。查詢時,先用給定值kx 在索引表中 檢測索引項,以確定所要進行的查詢在查詢表中的查詢分塊(由於索引項按關鍵碼字段有序,可用順序查詢或折半查詢) ,然後,再對該分塊進行順序查詢。

如關鍵碼集合為:

(22,12,13,9,20,33,42,44,38,24,48,60,58,74,49,86,53)

按關鍵碼值31,62,88 分為三塊建立的查詢表及其索引表如下:

設表共n個結點,分b塊,s=n/b

(分塊查詢索引表)平均查詢長度=log2(

n/s+1

)+s/2

(順序查詢索引表)平均查詢長度=(s2+2s+n)/(2s)

注:

分塊查詢的優點是在表中插入或刪除乙個記錄時,只要找到該記錄所屬塊,就在該塊中進行插入或刪除運算(因塊內無序,所以不需要大量移動記錄)。它主要代價是增加乙個輔助陣列的儲存控制項和將初始表分塊排序的運算。

它的效能介於順序查詢和二分查詢之間。

查詢 資料結構

分類 資料結構與演算法 c c 2012 07 24 16 17 614人閱讀收藏 舉報幾種查詢演算法 順序查詢,折半查詢,分塊查詢,雜湊表 一 順序查詢的基本思想 從表的一端開始,向另一端逐個按給定值kx 與關鍵碼進行比較,若找到,查詢成功,並給出資料元素在表中的位置 若整個表檢測完,仍未找到與k...

資料結構 查詢

查詢 searching 也稱 檢索,查表,就是在大量的資訊集中尋找乙個特定的資訊元素。查詢就是根據 給定的關鍵字值,在 查詢表中確定乙個關鍵字等於給定的 記錄或資料元素。若存在這樣的資料元素,則稱查詢成功的,否則查詢不成功。查詢是許多重要的電腦程式中 最耗費時間的部分,查詢演算法的優劣密切關係著查...

資料結構 查詢

一.靜態查詢表 靜態查詢表是僅對查詢表進行查詢操作,而不能改變其中資料的線性表,可以是基於陣列的順序儲存或以線性鍊錶儲存。靜態查詢表主要有順序表 有序順序表和索引順序表三種。1.順序查詢 函式模型 int seqsearch element list,int searchnum,int n 2.折半...