哈希(Hash)又稱散列,它是一個很常見的算法。在Java的HashMap數(shù)據(jù)結(jié)構(gòu)中主要就利用了哈希。哈希算法包括了哈希函數(shù)和哈希表兩部分。我們數(shù)組的特性可以知道,可以通過下標快速(O(1))的定位元素,同理在哈希表中我們可以通過鍵(哈希值)快速的定位某個值,這個哈希值的計算就是通過哈希函數(shù)(hash(key) = address )計算得出的。通過哈希值即能定位元素[address] = value,原理同數(shù)組類似。
最好的哈希函數(shù)當然是每個key值都能計算出唯一的哈希值,但往往可能存在不同的key值的哈希值,這就造成了沖突,評判一個哈希函數(shù)是否設計良好的兩個方面:
1.沖突少。
2.計算快。
下面給出幾種常用的哈希函數(shù),它們的背后都有一定的數(shù)學原理且經(jīng)過大量實踐,其數(shù)學原理不在這里探究?! ?/p>
BKDR哈希函數(shù)(h = 31 * h + c)
這個哈希函數(shù)被應用在Java的字符串哈希值計算。
延伸閱讀
學習是年輕人改變自己的最好方式