Hash

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;
}

拉鍊法解決hash衝突

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