查詢操作: ①查詢乙個資料是否在查詢表中。
②查詢乙個資料的其他屬性。
③對查詢表進行插入與刪除操作。(動態查詢表)
查詢演算法的優劣: 平均查詢長度asl。
…順序查詢法:
int
search_seq
(seq st, elemtype key)
查詢成功asl: n-i+1的求和。asl= (n+1)/2
查詢失敗asl:n
缺點:時間效率較低,改善方法可以通過將使用頻率大的關鍵字放在後面。可以提高效率。
優點:簡單,適用於線性儲存和鏈式儲存。同時對序列的有序性無要求。
注:
有序表和無序表的順序查詢法;
當被查詢元素在表中有且僅有乙個。查詢成功的比較次數相同
當被查詢元素在表中有且僅有兩個。查詢時間不同,有序表相同元素都在一塊,而無序表需遍歷全表才能全部找到。
查詢失敗時,有序表的asl=(1+2+ …+n+n)/(n+1)=n(n+2)/2(n+1),而無序表asl為n。
折半查詢法:
int
binary_search
(seqlist st; elemtype key)
return-1
;//未找到
}
查詢成功asl: asl=1/n(1x1+2x2+…+h*2^h)≈log2(n+1)-1
缺點: 僅適用於有序線性表。
優點:大大減少比較次數。
分塊查詢:
**定義:**塊內可以無序,塊間有序。
分為:索引表——>按順序排列每塊最大值,第一行寫每塊最大值,第二行寫塊內第乙個關鍵字的位置
查詢表
設索引表長度a,每塊查詢表長度b。
對索引表和查詢表都採用順序查詢。
查詢成功asl: asl= (s+b+2)/2
對索引表採用折半查詢和查詢表採用順序查詢。
查詢成功asl: asl= log2(a+1)+ (b+1)/2
優點:插入刪除比較容易,無需大量移動元素
缺點: 需要乙個索引表的額外空間,並對索引表排序。
…題型:①如何構造折半查詢判定樹。(演算法定義)
②計算asl
折半查詢的遞迴演算法
遞迴演算法的四條原則:
①基準情形
總有某些基準情形,無序遞迴即可解出。
②不斷推進
每一次遞迴都使求解狀況朝接近基準情形的方向推進
③設計法則
所有的遞迴呼叫都能進行
④合成效益法則
不要在不同的遞迴過程中做重複性的工作。
int
binaryselect
(sqlist st,elemtype k,
int low,
int high)
線性表中各結點的檢索概率不等, 則可用如下策略提高順序檢索的效率: 若找到指定的結點, 將該結點和其前驅結點(若存在)交換,使得經常被檢索的結點盡量位於表的前端。 試設計在順序結構和鏈式結構的線性表上實現上述策咯的順序檢索演算法
void
sqselect
(sqlist st, elemtype k,
int n)
}
查詢 線性結構的二分查詢
查詢是在大量的資訊中尋找乙個特定的資訊元素,在計算機應用中,查詢是常用的基本運算,例如編譯程式中符號表的查詢。線性結構 樹 圖的查詢都不一樣。線性結構的順序查詢就不多說了,這裡總結線性結構的二分查詢。二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好 其缺點是要求待查表為有序表,且插入刪...
資料結構 8 查詢 線性查詢
int sequential search int a,int n,int key n是要查詢的長度,key是關鍵字 return 0 int sequential search2 int a,int n,int key n是要查詢的長度,key是關鍵字 return i int binary se...
資料結構與演算法(線性結構) 查詢演算法之線性查詢
本篇主要介紹查詢演算法中的線性查詢,由於我們之前一直用的陣列開篇,所以接下來也會用陣列來進行實現。線性查詢其實就是在陣列當中找到某乙個元素,其實說白了就是把陣列所有元素都對比一次找到自己需要的元素。線性查詢也叫順序查詢,這是最基本的一種查詢方法,從給定的值中進行 輪詢 搜尋,從一端開始逐一檢查每個元...