推荐网页:
一种对汉字更为环保的编码方案:不知道有没有人使用。
哈希函数一直对我来说都是比较神秘的东东,其实并不复杂,但是一个想要一个好的哈希函数不简单。
这个哈希函数,这是来自于云风的博客,来自于 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