資料結構 python 25 雜湊表

2021-10-24 21:15:41 字數 1856 閱讀 5544

今天的內容沒有**,只是來簡單介紹一下雜湊表!

1. 定義

雜湊表:

例子:假設有乙個長度為7的雜湊表,雜湊函式h(k)=k%7。元素集合的儲存方式如下圖

雜湊表乙個通過雜湊函式來計算資料儲存位置的資料結構,通常支援如下操作:

2. 為嘛使用雜湊表?

直接定址表: key為k的元素放到k位置上

直接定址技術缺點:

當域u很大時,需要消耗大量記憶體,很不實際

如果域u很大而實際出現的key很少,則大量空間被浪費

無法處理關鍵字不是數字的情況

改進直接定址表——雜湊(hashing)

構建大小為m的定址表t

key為k的元素放到h(k)位置上

h(k)是乙個函式,其將域u對映到表t[0,1,…,m-1]

可以見1中的例子!

3. 雜湊衝突

雜湊衝突:由於雜湊表的大小是有限的,而要儲存的值的總數量是無限的,因此對於任何雜湊函式,都會出現兩個不同元素對映到同乙個位置上的情況,這種情況叫做雜湊衝突。比如h(k)=k%7, h(0)=h(7)=h(14)=…

1. 解決雜湊衝突——開放定址法

開放定址法:如果雜湊函式返回的位置已經有值,則可以向後探查新的位置來

儲存這個值。

線性探查:如果位置i被占用,則探查i+1, i+2,…

二次探查:如果位置i被占用,則探查i+1

2,i−

12,i

+22,

i−22

....

...i+1^, i-1^2,i+2^2,i-2^2.......

i+12,i

−12,

i+22

,i−2

2...

....

二度雜湊:有n個雜湊函式,當使用第1個雜湊函式h1發生衝突時,則嘗試使用h2,h3,…

2. 解決雜湊衝突——拉鍊法

拉鍊法:雜湊表每個位置都連線乙個鍊錶,當衝突發生時,衝突的元素將被加到該位置鍊錶的最後。

4. 常見雜湊函式

除法雜湊: h(k)=k % m

乘法雜湊法: h(k) = floor(m*(a*key%1))

全域雜湊: h_a_b(k)= ((a*key + b) mod p) mod m

a,b = 1,2,…,p-1

5. 雜湊表的應用

1. 雜湊表的應用——集合與字典

字典與集合都是通過雜湊表來實現的。

例子:

a=

使用雜湊表儲存字典,通過雜湊函式將字典的鍵對映為下標。

假設h(

'name')=

3,h(

'age')=

1,h(

'gender')=

4,則雜湊表儲存為[none,

18, none,

'alex, 'man']

如果發生雜湊衝突,則通過拉鍊法或開發定址法解決

2. 雜湊表的應用——md5演算法

md5(message- -digest algorithm 5)曾經是密碼學中常用的雜湊函式,可以把任意長度的資料對映為128位的雜湊值,其曾經包含如下特徵:

同樣的訊息,其md5值必定相同;

可以快速計算出任意給定消 息的md5值;

除非暴力的列舉所有可能的訊息,否則不可能從雜湊值反推出訊息本身;

兩條訊息之間即使只有微小的差別,其對應的md5值也應該是完全不同、完全不相關的;

不能在有意義的時間內人工的構造兩個不同的訊息使其具有相同的md5值。

資料結構 雜湊表

1.雜湊表的定義 元素的儲存位置和它的關鍵碼之間建立乙個確定的對應關係h,使得每個關鍵碼key和唯一的儲存位置h key 相對應。在查詢時,根據這個確定的對應關係找到給定值k的對映h k 若查詢集合中存在這個記錄,則必定在h k 的位置上,這種查詢技術稱為雜湊技術。採用雜湊技術將記錄儲存在一塊連續的...

資料結構 雜湊表

雜湊表的定義 雜湊表 hash table,也叫雜湊表 是根據關鍵碼值 key value 而直接進行訪問的資料結構。也就是說,它通過把 關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的 速度。這個對映函式叫做雜湊函式,存放 記錄的陣列叫做雜湊表。雜湊函式的析構方法 餘數法 取關鍵字被某個不大於雜...

資料結構 雜湊表

3 雜湊函式 數字分析法 根據關鍵碼在各個位上的分布情況,選取分布比較均勻的若干位組成雜湊位址。適用情況 能預先估計出全部關鍵碼的每一位上各種數字出現的頻度,不同的關鍵碼集合需要重新分析。4 雜湊函式 平方取中法 對關鍵碼平方後,按照雜湊表大小,取中間的若干位作為雜湊位址 平方後擷取 適用情況 實現...