資料結構篇_程式設計思想板塊_第六章查詢
程式設計思想板塊最主要的內容是資料結構經典題目及解答題目所需的程式設計思想,願對您能有所幫助
六、查詢
1)答題(畫圖)格式
答題(畫圖)格式 | |
---|---|
判定樹 | |
散列表 | |
衝突解決的拉鍊法 | |
2)折半查詢
- 當有一組集合查詢概率不一樣時:
① 若用鏈式儲存結構:除了可以使用順序查詢外,還可以構造二叉排序樹的形式,採用二叉連結串列儲存結構構造二叉排序樹
3)分塊查詢
- 易錯點:對索引表進行折半查詢時,若索引表中不包含目標關鍵字,則折半查詢最終停在low>high,要在low所指分塊中查詢
4)B樹
(1)B樹查詢
- 思想:
① 通過“查詢”確定插入位置(一定是在終端結點)
② 若插入後結點關鍵字個數未超過上限,則無需做其他處理
③ 若插入後結點關鍵字個數未超過上限,則無需做其他處理
④ 若插入後關鍵字個數超過上限,則需要將當前結點的中間元素放到父節點中,當前結點分裂為兩個部分;該操作會導致父節點關鍵字個數+1,若父節點關鍵字個數也超過了上限,則需要再向上分裂;根節點的分裂會導致B樹高度+1
(2)B樹刪除
- 若刪除的是非終端結點關鍵字:
① 用其直接前驅或直接後繼替代其位置,轉化為對“終端結點”的刪除
② 直接前驅:當前關鍵字左邊指標所指子樹中“最右下”的元素
③ 直接後繼:當前關鍵字右邊指標所指子樹中“最左下”的元素
- 若刪除的是終端結點:
① 刪除後結點關鍵字個數未低於下限,無需任何處理
② 低於下線:
(1) 右兄弟夠借,則用當前結點的後繼、後繼的後繼依次頂替空缺
(2) 左兄弟夠借,則用當前結點的前驅、前驅的前驅依次頂替空缺
(3) 左(右)兄弟都不夠借,則需要與父結點內的關鍵字、左(右)兄弟進行合併。合併後導致父節點關鍵字數量-1,可能需要繼續合併
5)散列表
1. 題目:陣列中有一個數字出現的次數超過了陣列長度的一半,請找出這個數字。讀者也許會想到先進行排序,位於位置(n+1)/2的數即為要找的數,這樣最小時間複雜度就為O(nlogn);若進行雜湊查詢,數字的範圍又未知,那麼應如何將時間複雜度控制在O(n)內呢?
演算法思想:出現的次數超過陣列長度的一半,表明這個數字出現的次數比其他數字出現的次數的總和還多。所以我們可以考慮每次刪除兩個不同的數,則在剩下的數中,待找數字出現的次數仍然超過總數的一半。通過不斷重複這個過程,不斷排除其他的數字,最終剩下的都為同一個數字,即為要找的數字)