1.简介
输入:任意长度的值(可简化为任意长度的二进制值)
处理:通过某种映射
输出:长度较短的固定长度的二进制值
用途:可检验数据的完整性,快速查找和加密算法
2.常见的hash函数C代码
1.加法hash
:就是把输入元素一个一个的加起来构成最后的结果,例子如下:
unsigned int addHash(const char *str)
{
const char *tmpstr = str;
unsigned int hashcode = 0;
while(*str)
{
hashcode += *str++;
}
return (hashcode & 0x7FFFFFFF);
}
2.位运算hash:利用各种位运算(常见的是移位和异或)来充分的混合输入元素,例子如下:
unsigned int bitwisehash(const char *str)
{
const char *tmpstr = str;
unsigned int hashcode = 0;
while(*str)
{
hashcode = (hashcode << 4) ^ (hashcode >> 28) + *str++;
}
return (hashcode & 0x7FFFFFFF);
}
3.乘法运算hash
:利用乘法的不相关性
unsigned int multiHash(const char *str)
{
const char *tmpstr = str;
unsigned int hashcode = 0;
while(*str)
{
hashcode = 31*hashcode + *str++;
}
return (hashcode & 0x7FFFFFFF);
}