三種查詢演算法:順序查詢,二分法查詢(折半查詢),分塊查詢,雜湊表(以後談)
一、順序查詢的基本思想:
從表的一端開始,順序掃瞄表,依次將掃瞄到的結點關鍵字和給定值(假定為a)相比較,若當前結點關鍵字與a相等,則查詢成功;若掃瞄結束後,仍未找到關鍵字等於a的結點,則查詢失敗。
說白了就是,從頭到尾,乙個乙個地比,找著相同的就成功,找不到就失敗。很明顯的缺點就是查詢效率低。
適用於線性表的順序儲存結構和鏈式儲存結構。
計算平均查詢長度。
例如上表,查詢1,需要1次,查詢2需要2次,依次往下推,可知查詢16需要16次,
可以看出,我們只要將這些查詢次數求和(我們初中學的,上底加下底乘以高除以2),然後除以結點數,即為平均查詢長度。
設n=節點數
平均查詢長度=(n+1)/2
二、二分法查詢(折半查詢)的基本思想:
前提:(1)確定該區間的中點位置:mid=(low+high)/2
min代表區間中間的結點的位置,low代表區間最左結點位置,high代表區間最右結點位置
(2)將待查a值與結點mid的關鍵字(下面用r[mid].key)比較,若相等,則查詢成功,否則確定新的查詢區間:
如果r[mid].key>a,則由表的有序性可知,r[mid].key右側的值都大於a,所以等於a的關鍵字如果存在,必然在r[mid].key左邊的表中。這時high=mid-1
如果r[mid].key如果r[mid].key=a,則查詢成功。
(3)下一次查詢針對新的查詢區間,重複步驟(1)和(2)
(4)在查詢過程中,low逐步增加,high逐步減少,如果high
平均查詢長度=log2(n+1)-1
注:雖然二分法查詢的效率高,但是要將表按關鍵字排序。而排序本身是一種很費時的運算,所以二分法比較適用於順序儲存結構。為保持表的有序性,在順序結構中插入和刪除都必須移動大量的結點。因此,二分查詢特別適用於那種一經建立就很少改動而又經常需要查詢的線性表。
三、分塊查詢的基本思想:
二分查詢表使分塊有序的線性表和索引表(抽取各塊中的最大關鍵字及其起始位置構成索引表
)組成,由於表是分塊有序的,所以索引表是乙個遞增有序表,因此採用順序或二分查詢索引表,以確定待查結點在哪一塊,由於塊內無序,只能用順序查詢。
設表共n個結點,分b塊,s=n/b
(分塊查詢索引表)平均查詢長度=log2(n/s+1)+s/2
(順序查詢索引表)平均查詢長度=(s2+2s+n)/(2s)
注:分塊查詢的優點是在表中插入或刪除乙個記錄時,只要找到該記錄所屬塊,就在該塊中進行插入或刪除運算(因塊內無序,所以不需要大量移動記錄)。它主要代價是增加乙個輔助陣列的儲存控制項和將初始表分塊排序的運算。
它的效能介於順序查詢和二分查詢之間。
三大查詢演算法
針對無序數列 陣列 順序查詢 public static intsequencesearch int arr,int key return 1 針對有序序列 陣列 主要有二分查詢,插值查詢,斐波拉契查詢 二分 拆半 查詢,針對有序陣列 public static intbinarysearch in...
資料結構 三大查詢
在之前的兩篇文章中,我們總結了八種經典的排序演算法,分別為直接插入排序,希爾排序,簡單選擇排序,堆排序,氣泡排序,歸併排序,快速排序,基數排序,並分別用python和c 來實現每個排序演算法。在這篇文章中,我們將繼續學習資料結構中的三種常用的查詢演算法 二分查詢,塊查詢,雜湊查詢。二分查詢作為最簡單...
python之三大查詢演算法
演算法簡介 順序查詢又稱為線性查詢,是一種最簡單的查詢方法。適用於線性表的順序儲存結構和鏈式儲存結構。該演算法的時間複雜度為o n 基本思路 從第乙個元素m開始逐個與需要查詢的元素x進行比較,當比較到元素值相同 即m x 時返回元素m的下標,如果比較到最後都沒有找到,則返回 1。優缺點 缺點 是當n...