1、查詢的基本概念
查詢也即檢索。
檔案:由記錄組成的集合,即含有大量資料的元素線性組合而成。查詢是指根據給定的某個值,確定關鍵字值,查詢確定關鍵字值與給定值相等的記錄在檔案中的位置。它是程式設計中一項重要的基本技術。查詢的結果有兩種情況:若在檔案中找到了待查詢的記錄,則稱查詢成功,這時可以得到該記錄在檔案中的位置,或者得到該記錄中其他的資訊;若在檔案中沒有找到所需要的記錄,則稱查詢不成功或查詢失敗,這時,相應的查詢演算法給出查詢失敗的資訊,同時也得到記錄插入檔案的位置。記錄:由若干資料項組成的資料元素,這些資料項也常稱作記錄中的資料域,用以表示某個狀態的物理意義。
關鍵字:用以區分檔案中記錄的資料項的值。若此關鍵字可以惟一地標識乙個記錄,則稱此關鍵字為主關鍵字。也就是說,對於不同的記錄,其對應的主關鍵字的值均不相同。若資料元素只有乙個資料項,其關鍵字即為該資料元素的值。
查詢可分為靜態查詢和動態查詢兩種,在查詢過程中不修改查詢表的長度和表中內容的方法稱作靜態查詢,反之稱作動態查詢。
2、查詢演算法的評價指標
平均查詢長度(asl):在查詢的過程中,一次查詢的長度是指需要比較的關鍵字次數,而平均查詢長度則是所有查詢過程中進行關鍵字的比較次數的平均值。
3、靜態查詢表
3.1 順序查詢
1)應用範圍
順序表或線性鍊錶表示的靜態查詢表
2)順序表的表示
typedef
struct
sstable;
3)效能分析
4)特點
3.2 折半查詢
1)演算法思想:
設表長為n,low、high和mid分別指向待查元素所在區間的上界、下界和中點,k為給定值:
2)折半查詢的效能分析:
3.3 分塊查詢(塊間有序,塊內無序)
分塊有序,即分成若干子表,要求每個子表中的數值都比後一塊中數值小(但子表內部未必有序)。 然後將各子表中的最大關鍵字構成乙個索引表,表中還要包含每個子表的起始位址(即頭指標)。
1)分塊查詢過程:
2)分塊查詢優缺點:
3)分塊查詢的效能分析
分塊查詢的平均長度為索引查詢和塊內查詢的平均長度值和。設索引查詢和塊內查詢的平均長度分別為 l1,l2,則分塊查詢的平均查詢長度為
4、b樹和b+樹
b樹是一種多路平衡查詢樹,它的每乙個結點最多包含 m 個孩子,m 被稱為 b 樹的階。
b樹主要應用於檔案系統以及部分資料庫索引,比如 mongodb。
而大部分關係型資料庫,比如 mysql,則使用 b+ 樹作為索引。
乙個m階的b樹具有如下幾個特徵:
b樹的高度
若 n ≥ 1,則對任意一棵包含 n 個關鍵字、高度為 h 、階數為 m 的 b 樹。
h ≥ logm(n+1),h ≤ log⌈m/2⌉((n+1)/2)+1。
乙個m階的b+樹具有如下特徵:
b+樹的優勢:
5、雜湊表的查詢
1)基本思想:記錄的儲存位置與關鍵字之間存在對應關係:
優點:查詢速度極快,為o(1),查詢效率與元素個數n無關。
裝填因子
詳解二分查詢演算法
二分查詢是通過將遞增序列不斷減半的方式尋找目標值的下標。其看似簡單,但往往存在一些細節被忽略,即while迴圈判斷條件和區間右邊界的取值方式。另外,我們往往只知二分查詢搜尋目標值的功能,而忽略了二分查詢的另外乙個功能,即尋找最大的小於目標值的元素和最小的大於目標值的元素。目錄 一 二分查詢演算法的基...
二分查詢演算法詳解
二分查詢針對的是乙個有序的資料集合,查詢思想有點類似分治思想。每次都通過跟區間的中間元素對比,將待查詢的區間縮小為之前的一半,直到找到要查詢的元素,或者區間被縮小為 0。二分查詢是一種非常高效的查詢演算法,高效到什麼程度呢?我們來分析一下它的時間複雜度。我們假設資料大小是 n,每次查詢後資料都會縮小...
二分查詢演算法詳解
最近刷了很多二分查詢相關的題目,這裡將近期的收穫做乙個總結,包括二分查詢的變形問題。如果能掌握,我相信以後基本上二分查詢相關的問題對你來說,都不是問題。二分查詢是啥我想不用過多的說明。我們都知道二分查詢的時間複雜程度是o logn o logn 查詢速度有多快呢?我們來分析一下。我們假設資料大小是 ...