對給定的關鍵字key,用乙個函式h(key)計算出元素位址,由此而得雜湊表(hash表,雜湊表),其中函式h(key)稱為雜湊函式
此函式值稱為雜湊位址。
然而,在實際應用中,會出現這樣的情況:
k1≠k2,但h(k1)=h(k2) ,
稱這種現象為衝突現象,k1,k2為同義詞。
針對衝突——如何解決衝突呢?
構造好的雜湊函式,以免衝突
由於衝突不可避免,因此,確切地說是減少衝突 & 妥善處理衝突
直接定址法:
h(k)= k
或者 h(k)=
ak+b(a
,b為任意正整數)
除留餘數法:
h(k)= k % p
其中p≤m,m
為陣列規模的最大質數。
平方取中法:例:
325在平方後取
105625
中間兩位,即56作為它的雜湊位址。
摺疊法:
如 身份證號碼:3
40104198805061532
先進行分組:
340 104
198805
061532
數值分析法
處理衝突:
開放位址法 hi(k)=(h(k) + di ) % m,i=1,2,…,q q<=m
線性探測法:hi(k)=(h(k)+i)%m,m為表的規模最大質數
二次探測法 hi(k) = ( h(k) + i2 ) % m
偽隨機數
拉鍊法再雜湊法 →h(k)→h1(k)→h2(k)→ …… →hi(k)
例0—9
,雜湊函式
h(k)=k%7
,採用線性探測法處理衝突,將下列資料依次插入下表中:
用此法來構造雜湊表可能會造成資料
堆積
。
裝填因子
——元素佔空間的比例,一般建議在
0.7-0.85之間
拉鍊法(鍊錶法)
——將同義詞構成乙個鍊錶
例:雜湊函式
h(k)=k%7
,採用拉鍊法將下列資料依次插入下表中 23,
若表中該位置為空,則查詢失敗。
否則,比較關鍵字,若相等,查詢成功,否則根據構造表時所採用的處理方法找下乙個位址,直至找到關鍵字等於k的元素(成功)或者找到空位置(失敗)為止。
一般在用鏈位址法構造的表中進行查詢,比在用線性探測法構造的表中進行查詢,查詢長度要小。
查詢 雜湊表查詢(雜湊表)
1 雜湊表查詢定義 雜湊技術是在記錄的儲存位置和它的關鍵字之間建立乙個確定的對應關係f,使得每個關鍵字key對應乙個儲存位置f key 查詢時,根據這個確定的對應關係找到給定值key的對映f key 若查詢集合中存在這個記錄,則必定在f key 的位置上。採用雜湊技術將記錄儲存在一塊連續的儲存空間中...
雜湊表(雜湊表)查詢
雜湊技術是在記錄的儲存位置和它的關鍵字之間建立起乙個確定的對應關係f,使每個關鍵字key對應乙個儲存位置f key f為雜湊函式,又稱雜湊函式。採用雜湊技術將記錄儲存在一塊連續的儲存空間中,這塊連續的儲存空間成為雜湊表 雜湊表。直接用key值的某個線性函式當位址。f key a key b 簡單,不...
雜湊表 雜湊表 查詢
直接定址法 數字分析法 平方取中法 平方取中法是將關鍵字平方之後取中間若干位數字作為雜湊位址。摺疊法摺疊法是將關鍵字從左到右分割成位數相等的幾部分,然後將這幾部分疊加求和,並按雜湊表表長取後幾體作為雜湊位址。除留餘數法 隨機數法 選擇乙個隨機數,取關鍵字的隨機函式值為它的雜湊位址。即 f key r...