码迷,mamicode.com
首页 > 其他好文 > 详细

Hash

时间:2019-05-30 14:43:30      阅读:106      评论:0      收藏:0      [点我收藏+]

标签:结果   列表   ret   就是   key   散列   拉链   for   分布   

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冲突

Hash

标签:结果   列表   ret   就是   key   散列   拉链   for   分布   

原文地址:https://blog.51cto.com/13990437/2402631

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!