第七章我們主要是學習了查詢,是在前面的基礎上對查詢進行優化。
一、基本概念
查詢表:由同一型別的資料元素或記錄構成的集合。(完全鬆散)
關鍵字:根據給定的某個值,在查詢表中確定乙個其關鍵字等於給定值的記錄或資料元素。
動態查詢表和靜態查詢表:若在查詢的同時對錶做修改操作(如插入或刪除),則相應的表稱為動態查詢表,否則稱為靜態查詢表。
平均查詢長度(asl):和給定值進行比較的關鍵字個數的期望值。
二、查詢方法
1. 順序查詢
思路:從表的一端開始,順序掃瞄表,依次將掃瞄到的結點關鍵字和給定值(假定為a)相比較,若當前結點關鍵字與a相等,則查詢成功;若掃瞄結束後,仍未找到關鍵字等於a的結點,則查詢失敗。
順序查詢也是最普通的一種方法,我們剛開始學習的時候幾乎都會用這種查詢方法,也就是從頭開始,乙個乙個地進行比較,所以這也是效率最低的乙個方法。
適用於線性表的順序儲存結構和鏈式儲存結構。
演算法實現:
int sequential_search(int *a, int n, intkey)
return0;
}
平均查詢長度=(n+1)/2
順序表查詢優化:
int sequential_search(int *a, int n, intkey)
return
i;}
2、 折半查詢(二分查詢)
思路:在有序表中,取中值記錄作為比較物件,若給定值與中間記錄的關鍵字相等,則查詢成功,若給定值小於中間記錄的關鍵字,則在中間記錄的作伴去繼續查詢,若大於中間記錄的關鍵字,則在中間記錄的右半區繼續查詢。不斷重複上述過程,直到查詢成功,或所有查詢區域記錄,查詢失敗為止。
演算法實現:
int bitnary_seqarch(int *a, int n, intkey)
return0;
}
3、分塊查詢
思路:二分查詢表使分塊有序的線性表和索引表(抽取各塊中的最大關鍵字及其起始位置構成索引表)組成,由於表是分塊有序的,所以索引表是乙個遞增有序表,因此採用順序或二分查詢索引表,以確定待查結點在哪一塊,由於塊內無序,只能用順序查詢。
設表共n個結點,分b塊,s=n/b
(分塊查詢索引表)平均查詢長度=log2(n/s+1)+s/2
(順序查詢索引表)平均查詢長度=(s2+2s+n)/(2s)
注:分塊查詢的優點是在表中插入或刪除乙個記錄時,只要找到該記錄所屬塊,就在該塊中進行插入或刪除運算(因塊內無序,所以不需要大量移動記錄)。它主要代價是增加乙個輔助陣列的儲存控制項和將初始表分塊排序的運算。
它的效能介於順序查詢和二分查詢之間。
雜湊表查詢技術不同於順序查詢、二分查詢、分塊查詢。它不以關鍵字的比較為基本操作,採用直接定址技術。在理想情況下,無須任何比較就可以找到待查關鍵字,查詢的期望時間為o(1)。
三、樹表的查詢(對於動態查詢表)
在這一節主要是介紹了二叉排序樹,平衡二叉樹,b - 樹和b+樹,這也是從一開始的二叉排序樹不斷進行優化,一直到現在應用最多的b+樹,也是最有現實意義的方法。
b+樹是應檔案系統所需而出的一種b樹的變形樹,但從嚴格意義上來講,它其實已經不是第六章定義的樹了,在b樹中,每乙個元素在該樹上只出現一次,有可能在分支結點,也有可能在葉子結點。而在b+樹中,出現在分支結點中的元素會被當做它們在該分支結點位置的中序後繼者中在此列出。另外,每個葉子結點都會儲存乙個指向後一葉子結點的指標。b+樹適合帶有範圍的查詢,比如查詢我們學校18~20歲是我學生人數,我們可以通過從根結點出發找到第乙個18歲的學生,然後在葉子結點順序查詢符合範圍的所有記錄。
四、總結
這一章我們都是圍繞查詢來學習的,首先當然是需要弄清楚一些基本概念,然後再是掌握哪些基本方法。查詢,在我們的生活中也經常會用到,所以實際性比較高。
最後就是臨近期末,所以要開始準備複習了,希望能抓緊時間將學過的知識好好複習一遍。
第七章學習小結
第七章的內容是查詢。查詢可以分為3種。分別是線性表查詢 樹表查詢 雜湊表查詢。1 線性表查詢 線性表查詢主要介紹了順序查詢和折半查詢這兩種方法。1 順序查詢區別於上學期學的方法,設定了哨兵,採用從後往前開始查詢的方法,將時間複雜度縮短了一倍。asl n 1 2 2 折半查詢,其實也叫二分查詢,原理是...
第七章學習小結
查詢的基本概念 查詢表 同一型別的資料元素 記錄 構成的集合。靜態查詢表 對查詢表只進行查詢操作。動態查詢表 不僅進行查詢操作,而且在查詢過程中還伴隨著插入 查詢的資料元素不在表中時 刪除某個資料元素的操作。關鍵字 key 是資料元素 或記錄 的某個資料項的值,用它可標識 識別 乙個資料元素 或記錄...
第七章 查詢 學習小結
一 本章思維導圖 線性表 樹表 雜湊表 二 pta實踐及作業 二分查詢變形 hashing 2 二分查詢變形 面試 變形方向 1 算大於key的最小值 小於key的最大值 2 形成分割線,一邊全部大於key值,一邊全部小於key值 3 hashing i 重要 1 判斷是否為素數 質數 若不是,則要...