編譯處理時,涉及變數及屬性的管理 :插入(新變數的定義),查詢(變數的引用)。
順序查詢 o(n) 二分查詢 o(logn) 二叉樹查詢o(h) 平衡二叉樹 o(logn)
如何快速查詢?
查詢的本質:已知物件找位置
有序的安排物件-》 全序:順序查詢 半序:二叉樹
直接算出位置-》 雜湊查詢
雜湊查詢:1.計算位置。2.解決衝突。
二、處理衝突
1. 開放位址法。(換個位置)
2.鏈位址法。(同一位置的衝突物件放在一起)
開放位址法
一旦發生衝突,就按照某種規則起找另一空位址。
若 發生了第i次衝突,試探性的將位址加di
線性探測:di=i 容易產生聚集現象
平方探測:di=+-i*i 有空間,但跳來跳去不一定能找到。 有定理顯示,如果雜湊表長度是某個4k+3形式的素數時,平方探測就可以探查到整個雜湊空間。
雙雜湊:di=i*h2(key) 對任意key,h2(key)!=0 h2(key )=p-(key mod p)
再雜湊:把雜湊表擴大,雜湊表擴大時,需要重新計算。
**雜湊表的建立:
1#define maxtablesize 100000 /* 允許開闢的最大雜湊表長度 */
2 typedef int
index;
3typedef index position;
4 typedef enum
entrytype;
56 typedef struct hashentry cell;//
雜湊表單元定義
7struct
hashentry8;
12 typedef struct tb1node *hashtable;//
雜湊表定義
13struct
tb1node 14;
18int nextprime(int
x)19
29return
p;30
}31 hashtable hashtablecreate(int
tablesize)
32
錯誤分析:
1.一定要檢查函式的返回值!!!!不要漏掉29行
平方探測法:
1position find(elementtype key,hashtable h)215
else
//判斷計數器是偶數,di-i平方
162122}
23return
newpositon;24}
25bool
insert(hashtable h,elementtype key)
2635
else
3640
41 }
雜湊表平方探測法
平方探測採用原雜湊值加整數平方作為備選位置避免了一次聚集 會產生二次聚集,在備選位置上聚集 裝填因子不能大於0.5,即至少有一半為空且表大小為素數才能保證插入元素總能成功 public class quadraticprobinghashtable public quadraticprobingha...
DS雜湊查詢 線性探測再雜湊
題目問題 a ds雜湊查詢 線性探測再雜湊 時間限制 1 sec 記憶體限制 128 mb 提交 454 解決 303 提交 狀態 討論版 題目描述 定義雜湊函式為h key key 11,輸入表長 大於 等於11 輸入關鍵字集合,用線性探測再雜湊構建雜湊表,並查詢給定關鍵字。程式要求 若使用c 只...
查詢 雜湊表查詢(雜湊表)
1 雜湊表查詢定義 雜湊技術是在記錄的儲存位置和它的關鍵字之間建立乙個確定的對應關係f,使得每個關鍵字key對應乙個儲存位置f key 查詢時,根據這個確定的對應關係找到給定值key的對映f key 若查詢集合中存在這個記錄,則必定在f key 的位置上。採用雜湊技術將記錄儲存在一塊連續的儲存空間中...