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

一个字符串的哈希函数

时间:2015-05-28 09:44:39      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:算法

推荐网页:
云风的介绍Lua的.
一种对汉字更为环保的编码方案:不知道有没有人使用。

哈希函数一直对我来说都是比较神秘的东东,其实并不复杂,但是一个想要一个好的哈希函数不简单。

这个哈希函数,这是来自于云风的博客,来自于 Lua 的实现,说起他,一个人向中国推荐了 Lua 脚本,值得佩服。

unsigned long hash(const char* name, size_t len){
    unsigned long h = (unsigned long) len;
    size_t step = (len >> 5) + 1;
    for(size_t i = len; i >= step; i -= step)
        h = h ^ (h<<5) + (h>>2) + (unsigned long)name[i-1]
    return h;
}

云风: 一个方便的 hash 函数 应该散列的比较开(不要集中),哈希函数计算速度和字符串长度关系不大,又不能只计算字符串的开头和结尾。这个函数时从 Lua中看到的。

这个哈希值是 unsigned long 类型,如果你想要你的哈希值在一个范围之内,比如说10000。那么还应该 对值进行取模 hash(str) mod 10000

如何评价一个哈希函数的好坏(我自己的标准):
1. 哈希函数应该让值很分散,减少冲突 (如何证实呢?)
2. 哈希函数的计算速度,(和字符串的长度无关,并且又不能只利用字符串固定的一部分)
3. 整数值的哈希 和 字符串的哈希函数有区别吗? 标准库中的哈希函数时如何实现的?

一个字符串的哈希函数

标签:算法

原文地址:http://blog.csdn.net/xiaorenwuzyh/article/details/46051979

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