第七章的內容是查詢。
查詢可以分為3種。分別是線性表查詢、樹表查詢、雜湊表查詢。
1、線性表查詢
線性表查詢主要介紹了順序查詢和折半查詢這兩種方法。
1、 順序查詢區別於上學期學的方法,設定了哨兵,採用從後往前開始查詢的方法,將時間複雜度縮短了一倍。(asl=(n+1)/2)
2、折半查詢,其實也叫二分查詢,原理是每次查詢不成功之後將問題的規模縮短一段,所以這樣算下來自然就很快樂。
但是折半查詢有侷限性,就是只有當資料以順序儲存結構儲存而且按關鍵字有序時才能使用,不然效率反而不如順序查詢。
如果使用鏈式儲存會怎麼樣呢?鏈式儲存的話在排序其實差別不大,但是在得到mid後定位到某個位置的時候時間複雜度為o(n),而順序儲存結構為 o(1)。
二分查詢的關鍵演算法:(asl=log2n次方)
while(low<=high)return 0;//找不到的情況
2、樹表查詢
引入樹表查詢的目的是解決邊查詢邊操作的應用需求。
1、二叉排序樹。
二叉排序樹是比較簡單的例子,採用左小右大的儲存規則進行儲存,然後遞迴進行查詢。
但是二叉排序樹有乙個很致命的缺點是asl與樹的形態密切相關。在最好情況下(左右結點都存在),此時的asl與二分查詢逼近,
在最壞的情況下,該二叉樹是一棵單支樹,那麼此時就是 n的數量級了。所以為了解決這個問題,就引進了平衡二叉樹。
2、平衡二叉樹
構建的時候以平衡因子作為標準,平衡因子的取值只能在 1 0 -1之間取,如果為2那麼就認為這棵樹是不平衡的。具體的插入步驟在這裡就不詳細說了。
3、b-樹
b-樹的引入其實是為了解決 內外存反覆交換的問題。在這裡引入了多路查詢樹的概念,就是乙個節點儲存多個資料引出多個分支,從而在資料量大的時候減少樹的深度。
3、雜湊查詢
雜湊查詢主要由兩個步驟入手。
1、構造雜湊函式
雜湊函式的構造有4種方法。
1、數字分析法
2、平方取中發
3、摺疊法
4、除留餘數法,這個也是構造雜湊函式中用的比較多的方法。h(key)=key%p,p的選擇比較重要,p一般是小於表長的最大質數。如果不是質數的話那麼該因子在關鍵字列表中
可能存在多個被除數,導致乙個雜湊位址對應有多個關鍵字,產生嚴重衝突,不方便我們獲取資訊。
2、處理衝突
上文提到了構造雜湊函式的時候會不可避免的產生衝突,書上針對這個問題就給出了一些解決方法。
分為2大類。
1、開放位址法 hi=(h(key)+di)%m
(1)線性探測法。di=1,2,3,4.......n,發生衝突時往後找空缺,有空缺補上,如果到表尾的話,就繼續疊加從而求餘後在表頭重新開始查詢插入。
(2)二次探測法。di=1²,-1²,2²,-2²........k²,-k² 發生衝突時也是找空缺,不過是查詢長度以及方向不一樣,其實也看個人是如何設定的
(3)偽隨機探測法。di為隨機數,方法其實與線性探測大致相同。
2、鏈位址法
引入鏈位址法是為了避免開放位址法出現二次聚集的現象以及提公升查詢的效率,鏈位址法是把具有相同雜湊 位址的記錄放在同乙個單鏈表
第七章學習小結
查詢的基本概念 查詢表 同一型別的資料元素 記錄 構成的集合。靜態查詢表 對查詢表只進行查詢操作。動態查詢表 不僅進行查詢操作,而且在查詢過程中還伴隨著插入 查詢的資料元素不在表中時 刪除某個資料元素的操作。關鍵字 key 是資料元素 或記錄 的某個資料項的值,用它可標識 識別 乙個資料元素 或記錄...
第七章小結
第七章我們主要是學習了查詢,是在前面的基礎上對查詢進行優化。一 基本概念 查詢表 由同一型別的資料元素或記錄構成的集合。完全鬆散 關鍵字 根據給定的某個值,在查詢表中確定乙個其關鍵字等於給定值的記錄或資料元素。動態查詢表和靜態查詢表 若在查詢的同時對錶做修改操作 如插入或刪除 則相應的表稱為動態查詢...
第七章 查詢 學習小結
一 本章思維導圖 線性表 樹表 雜湊表 二 pta實踐及作業 二分查詢變形 hashing 2 二分查詢變形 面試 變形方向 1 算大於key的最小值 小於key的最大值 2 形成分割線,一邊全部大於key值,一邊全部小於key值 3 hashing i 重要 1 判斷是否為素數 質數 若不是,則要...