哈希算法

哈希表(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;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值