哈希算法

哈希表(Hashtable,也叫散列表),是根据关键码值(Keyvalue)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。
这个映射函数叫做散列函数,存放记录的数组叫做散列表。 哈希表的做法其实很简单,就是把Key通过一个固定的算法函数既所谓的哈希函数转换成一个整型数字,然后就将该数字对数组长度进行取余,取余结果就当作数组的下标,将value存储在以该数字为下标的数组空间里。
而当使用哈希表进行查询的时候,就是再次使用哈希函数将key转换为对应的数组下标,并定位到该空间获取value,如此一来,就可以充分利用到数组的定位性能进行数据定位。

--------------------------------------
其实就是通过哈希函数使要存储的目标数据,压缩成可以表示成数组下标的数值,关键是要足够随机,越乱七八糟越好。然后处理碰撞情况。
主要处理方式为数组顺延法:判断遇到碰撞时,往该下标的下一个位置储存。
还可以用链表:碰撞时,在该下标处拉出一条链表对数据进行保存。

常用哈希函数:
int cal_hash(char *str, int len)
{
int len = strlen(str);
int sum = 1, i;
for (i = 0; i < len; ++i)
{
sum = (sum * 131 + str[i]);//(字符也有数值)
}
return sum % N;
}


数组顺延法:

while (hashit[has].vis == 1) has = (has + 1) % N;
hashit[has].vis = 1;

你可能感兴趣的:(数据结构与算法)