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地址的情況,這種情況叫做哈希沖突。
當沖突發生時,我們需要想辦法解決沖突,一般常用的方法有:開放定址法、單獨鏈表法、雙散列法、再散列法以及建公共溢出取等方法。
開放定值法