哈希函數


hash函數

hash函數,簡單點說,就是輸入一個數,輸出一個數,輸出具有唯一性,輸入和輸出具有一一映射關系,該函數叫做哈希函數或雜湊函數,輸出值叫做哈希值或雜湊值,常見的雜湊算法有:Md5、Sha256、SM3等。

Hash通過Hash函數,將Key值映射為地址,Address = F[key];

無論輸入是什么數字格式、文件有多大,輸出都是固定長度的比特串。以比特幣使用的Sh256算法為例,無論輸入是什么數據文件,輸出就是256bit。

每個bit就是一位0或者1,256bit就是256個0或者1二進制數字串,用16進制數字表示的話,就是多少位呢?

16等於2的4次方,所以每一位16進制數字可以代表4位bit。那么,256位bit用16進制數字表示,當然是256除以4等於64位。

於是你通常看到的哈希值,就是這樣的了:
00740f40257a13bf03b40f54a9fe398c79a664bb21cfa2870ab07888b21eeba8

在學數據結構時,常見的hash函數有:直接定址法、數字分析法、平方取中法、折疊法、隨機數法、除留余數法.

直接定值法

數字分析法

平方取中法

折疊法

隨機數法

除留余數法

碰撞(沖突)問題

不管選用何種散列函數,不可避免的都會產生不同Key值對應同一個Hash地址的情況,這種情況叫做哈希沖突。

當沖突發生時,我們需要想辦法解決沖突,一般常用的方法有:開放定址法、單獨鏈表法、雙散列法、再散列法以及建公共溢出取等方法。

開放定值法


鏈表法

裝填因子

參考

1、Hash詳解
2、《一切皆是映射:代碼的本質》哈希算法


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM