雜湊技術是在記錄的儲存位置和它的關鍵字之間建立起乙個確定的對應關係f,使每個關鍵字key對應乙個儲存位置f(key)。
f為雜湊函式,又稱雜湊函式。採用雜湊技術將記錄儲存在一塊連續的儲存空間中,這塊連續的儲存空間成為雜湊表/雜湊表。
直接用key值的某個線性函式當位址。
f(key) = a * key + b
簡單,不起衝突,需要事先知道關鍵字分布,適合查詢表較小且連續的情況,
當關鍵字位數較大時,可以抽取關鍵字中的幾位,對抽取出來的數字做左移或者右移,或著前幾位與後幾位疊加等操作來獲取新的位址。
適用於關鍵字位數較大,但知道關鍵字分布的情況
對關鍵字進行平方取中間3位。
適用與關鍵字位數不大且不知道關鍵字分布的情況
關鍵字位數較多時,可以將關鍵字分為幾部分,然後相加,再取其中幾位。
適用於事先不知道關鍵字的分布,且關鍵字位數較多的情況
最常用的構造雜湊函式方法
對於雜湊表長為m的雜湊函式公式:
f(key) = key mod p (p <= m)
p通常為小於或等於表長的最大質數(最好接近m)或不包含小於20質因子的合數。
發現衝突後去尋找下乙個空的雜湊位址。只要雜湊表足夠大,一定會找到乙個合適的位置。
f(key) = (f(key) + d
id_i
di mod m (d
id_i
di = 1,2,3,…,m-1)
也叫做線性探測法。
衝突也被叫做堆積。
該方法的問題:假設雜湊表中只剩乙個空位,且恰好該空位在待插元素的前乙個位置。按照上述方法我們需要迴圈一圈才能找到空位。
因此為了解決這個問題我們對d的取值進行了擴充套件。
令d
id_i
di = 1
21^2
12, − 12
-1^2
−12, 2
22^2
22, − 22
-2^2
−22,… q
2q^2
q2, − q2
-q^2
−q2, (q <= m/2)
這樣就提供了雙向尋找空位的可能。
增加平方運算的目的是為了不讓關鍵字都聚集在某一塊區域,也被叫做二次探測法。
還有乙個方法,在發生衝突時,我們對d
id_i
di採用隨機函式計算得到。稱其為隨即探測法。
這裡用偽隨機數,即設定的隨機種子是相同的,因此可以生成不會重複的數列。
即發生衝突時,更換雜湊函式。增加了計算時間。
即在衝突位置設定單鏈表。查詢時我們還需要遍歷鍊錶。
為衝突key值設定乙個公共溢位區,按順序排列。查詢時,若雜湊表種資料與查詢元素相等,則查詢成功。若不相等,可以先去公共溢位區順序查詢。若找不到則返回查詢失敗。
對於衝突資料較少的表,公共溢位區的效能不錯。
//定義雜湊表結構
typedef
struct
hashtable;
int m =0;
//雜湊表長
#define success 1
#define unsuccess 0
#define hashsize 12
#define nullkey -32768
//初始化雜湊表
bool
inithashtable
(hashtable* h)
return success;
}
//取模法構建雜湊函式
inthash
(int key)
//插入key值
void
inserthash
(hashtable* h,
int key)
h->elem[addr]
= key;
}
//查詢
bool
searchhash
(hashtable* h,
int key)
}return success;
}
//主函式
intmain()
;inithashtable
(h);
for(
int i =
0; i <12;
++i)
cout <<
searchhash
(h,56
)<<
searchhash
(h,100);
return0;
}
1、雜湊函式是否均勻
2、處理衝突的方法
3、雜湊表的裝填因子
裝填因子a = 填入表中的記錄個數 / 雜湊表長度。 記錄越多a越大,也就代表產生衝突的可能性越大。
查詢 雜湊表查詢(雜湊表)
1 雜湊表查詢定義 雜湊技術是在記錄的儲存位置和它的關鍵字之間建立乙個確定的對應關係f,使得每個關鍵字key對應乙個儲存位置f key 查詢時,根據這個確定的對應關係找到給定值key的對映f key 若查詢集合中存在這個記錄,則必定在f key 的位置上。採用雜湊技術將記錄儲存在一塊連續的儲存空間中...
雜湊表 雜湊表 查詢
直接定址法 數字分析法 平方取中法 平方取中法是將關鍵字平方之後取中間若干位數字作為雜湊位址。摺疊法摺疊法是將關鍵字從左到右分割成位數相等的幾部分,然後將這幾部分疊加求和,並按雜湊表表長取後幾體作為雜湊位址。除留餘數法 隨機數法 選擇乙個隨機數,取關鍵字的隨機函式值為它的雜湊位址。即 f key r...
查詢 之 雜湊表查詢(雜湊表)
雜湊技術是在記錄的儲存位置和它的關鍵字之間建立乙個確定的對應關係f,使得每個關鍵字key對應乙個儲存位置f key 這裡對應關係f稱為雜湊函式,又稱為雜湊 hash 函式。採用雜湊技術將記錄儲存在一塊連續的儲存空間中,這塊連續儲存空間稱為雜湊表或雜湊表 hash table 雜湊技術既是一種儲存方法...