一个字符串的哈希函数

推荐网页:

云风的介绍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. 整数值的哈希 和 字符串的哈希函数有区别吗? 标准库中的哈希函数时如何实现的?

时间: 2024-11-05 12:27:16

一个字符串的哈希函数的相关文章

Oracle中查询一个字符串的长度的函数

Oracle取字符串长度的函数length()和lengthb() lengthb(string)计算string所占的字节长度:返回字符串的长度,单位是字节 length(string)计算string所占的字符长度:返回字符串的长度,单位是字符 对于单字节字符,lengthb()和length()是一样的 可以用lengthb('string')=length('string') 判断字符串是否含有中文

几种哈希函数的比较

基本概念所谓完美哈希函数,就是指没有冲突的哈希函数,即对任意的 key1 != key2 有h(key1) != h(key2).设定义域为X,值域为Y, n=|X|,m=|Y|,那么肯定有m>=n,如果对于不同的key1,key2属于X,有h(key1)!=h(key2),那么称h为完美哈希函数,当m=n时,h称为最小完美哈希函数(这个时候就是一一映射了). 在处理大规模字符串数据时,经常要为每个字符串分配一个整数ID.这就需要一个字符串的哈希函数.怎么样找到一个完美的字符串hash函数呢?有

常用哈希函数的比较及其C语言实现

基本概念 所谓完美哈希函数,就是指没有冲突的哈希函数,即对任意的 key1 != key2 有h(key1) != h(key2). 设定义域为X,值域为Y, n=|X|,m=|Y|,那么肯定有m>=n,如果对于不同的key1,key2属于X,有h(key1)!=h(key2),那么称h为完美哈希函数,当m=n时,h称为最小完美哈希函数(这个时候就是一一映射了). 在处理大规模字符串数据时,经常要为每个字符串分配一个整数ID.这就需要一个字符串的哈希函数.怎么样找到一个完美的字符串hash函数呢

经常使用哈希函数的比較及其C语言实现

基本概念 所谓完美哈希函数.就是指没有冲突的哈希函数.即对随意的 key1 != key2 有h(key1) != h(key2). 设定义域为X,值域为Y, n=|X|,m=|Y|.那么肯定有m>=n,假设对于不同的key1,key2属于X,有h(key1)!=h(key2),那么称h为完美哈希函数,当m=n时,h称为最小完美哈希函数(这个时候就是一一映射了). 在处理大规模字符串数据时.常常要为每一个字符串分配一个整数ID.这就须要一个字符串的哈希函数.怎么样找到一个完美的字符串hash函数

djb2:一个产生简单的随机分布的哈希函数

目录 LCG算法 示例代码 djb2 示例代码 为什么选择参数33和 33 was chosen because: 5381 was chosen because 哈希选择参考 LCG算法 djb2与LCG很类似,故先介绍 LCG. LCG(linear congruential generator)算法是一个古老的产生随机数的算法.由以下参数产生 参数 m a c X 性质 模数 乘数 加数 随机数 作用 取模 移位 偏移 作为结果 LCG算法是如下的一个递推公式,每下一个随机数是当前随机数向

lintcode 128哈希函数

描述 在数据结构中,哈希函数是用来将一个字符串(或任何其他类型)转化为小于哈希表大小且大于等于零的整数.一个好的哈希函数可以尽可能少地产生冲突.一种广泛使用的哈希函数算法是使用数值33,假设任何字符串都是基于33的一个大整数,比如: hashcode("abcd") = (ascii(a) * 333 + ascii(b) * 332 + ascii(c) *33 + ascii(d)) % HASH_SIZE = (97* 333 + 98 * 332 + 99 * 33 +100)

lintcode 容易题:Hash Function 哈希函数

题目: 哈希函数 在数据结构中,哈希函数是用来将一个字符串(或任何其他类型)转化为小于哈希表大小且大于等于零的整数.一个好的哈希函数可以尽可能少地产生冲突.一种广泛使用的哈希函数算法是使用数值33,假设任何字符串都是基于33的一个大整数,比如: hashcode("abcd") = (ascii(a) * 333 + ascii(b) * 332 + ascii(c) *33 + ascii(d)) % HASH_SIZE = (97* 333 + 98 * 332 + 99 * 33

128 哈希函数

原题网址:https://www.lintcode.com/problem/hash-function/description 描述 在数据结构中,哈希函数是用来将一个字符串(或任何其他类型)转化为小于哈希表大小且大于等于零的整数.一个好的哈希函数可以尽可能少地产生冲突.一种广泛使用的哈希函数算法是使用数值33,假设任何字符串都是基于33的一个大整数,比如: hashcode("abcd") = (ascii(a) * 333 + ascii(b) * 332 + ascii(c) *

哈希函数和哈希表综述 (转)

哈希表及哈希函数研究综述 摘要 随着信息化水平的不断提高,数据已经取代计算成为了信息计算的中心,对存储的需求不断提高信息量呈现爆炸式增长趋势,存储已经成为急需提高的瓶颈.哈希表作为海量信息存储的有效方式,本文详细介绍了哈希表的设计.冲突解决方案以及动态哈希表.另外针对哈希函数在相似性匹配.图片检索.分布式缓存和密码学等领域的应用做了简短得介绍 哈希经过这么多年的发展,出现了大量高性能的哈希函数和哈希表.本文通过介绍各种不同的哈希函数的设计原理以及不同的哈希表实现,旨在帮助读者在实际应用中,根据问