散列函數 Hash

概念

Hash: 一般譯作散列雜湊,或音譯爲哈希
常用的hash算法:
  • MD4:基於32位操作系統實現。
  • MD5:速度比MD4慢一點,但更安全,在抗分析和抗差分方面表現更好。
  • SHA-1 :抗窮舉(brute-force)性更好,SHA-1 設計時基於和MD4相同原理,並且模仿了該算法
  • 其他

散列函數

1.除留餘數法 h(K) = K%m

m>n : 素數 (散列表長度)m>n(帶散列的數據表長)

參數 含義
K 關鍵字
m 散列表的長度
n 帶散列的數據表長

2. 直接定址法 h(k) = k+e

這樣散列地址就是關鍵字本身,沒有衝突發生,若有衝突,則表明關鍵字錯誤。

參數 含義
K 關鍵字
e 某個數值常量

解決衝突的方法

1.線性探測法

方法: 從發生衝突的地方一次查找下一個單元,直到找到一個空閒單元,或探查完所有單元爲止。

2.鏈接法

散列表中每個單元存放相應每個單鏈表的表頭結點,單鏈表的結點動態分配產生,將發生衝突的結點用單鏈表連接起來。

舉個例子在這裏插入圖片描述
參數 含義
ASL 平均查找長度

散列存儲 散列查找在這裏插入圖片描述

上圖案例使用散列函數爲:h(K)=K%5

參數 含義
K: 代查找關鍵字
h(K): 散列函數
g: 散列地址(宿主空間下標值)
散列表 散列存儲的數組

舉個例子
一個集合s={18, 75, 62},散列表 表長爲5,散列函數 h(K)=K%5;
h(18) = 18%5 = 3
h(75) = 75%5 = 0
h(62) = 62%5 = 2
在這裏插入圖片描述
若再存儲一個關鍵字 K=13,則散列地址爲 h(13) = 13%5 = 3
發現下標爲3的單元已被佔用,此時發生了衝突

同義詞: 不同關鍵字,具有相同散列地址
同義詞衝突: 兩個關鍵字的散列地址相同

衝突的影響因素

1. 裝填因子 α
α = n/m
n: 原散列表已存入的數
m: 原散列表空間大小
α 越小,空閒空間比例越大,發生衝突的可能性越小
在這裏插入圖片描述

2. 散列函數
散列函數選擇恰當會使散列地址儘可能均勻的分散到散列空間,否則會集中於某一區域,增大沖突的發生
在這裏插入圖片描述

散列函數應用

1. 錯誤矯正
2. 語音識別
3. 信息安全
  • 文件校驗
  • 數字簽名
  • 鑑權協議

散列查找總結

優點:

插入和查找的速度相當快

缺點:

  1. 計算散列地址需要花費時間
  2. 在散列表中體現不出數據元素之間的邏輯關係
  3. 佔用存儲空間多

參考:
https://www.bilibili.com/video/BV1g4411H7Py
https://baike.baidu.com/item/Hash/390310

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章