Hash表(HashTable)又稱散列表,通過把key映射到數組中一個位置,可以加快數據訪問速度,這個映射函數就是Hash函數,存放數據的數組就是哈希表。
哈希算法
如果不同的key哈希之後就結果是一樣的,就是導致hash衝突,hash衝突的機率也是評判哈希算法質量的關鍵指標。
經典Hash算法Times33
/**
* 經典hash算法Times33
* 算法思路:不斷*33,效率和分佈性都非常好
* 用於:Apache,perl,php
* @param $str
* @return int
*/
function myHash($str) {
$hash = 5381;
$s = md5($str); //相比其它版本,進行了md5加密
$seed = 5;
$len = 32;//加密後長度32
for ($i = 0; $i < $len; $i++) {
// (hash << 5) + hash 相當於 hash * 33
$hash = ($hash << $seed) + $hash + ord($s{$i});
}
return $hash & 0x7FFFFFFF;
}