【模版】简单哈希和哈希表处理冲突

哈希(Hash)算法就是单向散列算法,它把某个较大的集合P映射到另一个较小的集合Q中。数学原理听起来很抽象,在网上找到一个很生动的描述。我们有很多的小猪,每个的体重都不一样,假设体重分布比较平均(我们考虑到公斤级别),我们按照体重来分,划分成100个小猪圈。 然后把每个小猪,按照体重赶进各自的猪圈里,记录档案。如果我们要精确找到某个小猪怎么办呢?我们需要每个猪圈,每个小猪的比对吗? 当然不需要了。 我们先看看要找的这个小猪的体重,然后就找到了对应的猪圈了。 在这个猪圈里的小猪的数量就相对很少了。 我们在这个猪圈里就可以相对快的找到我们要找到的那个小猪了。

当题目中数值很小的时候我们只需要用哈希数组来存取数值来当作它的下标,从而寻找


http://blog.csdn.net/u013486414/article/details/30775765 这道题可以让你明白简单哈希的应用。



当数值特别大的时候我们运用哈希表,哈希表存储的时候可能会有一个地址出现两个数值,以为一个地址只能有一个数值的储存,所以这就产生了冲突,冲突的处理方法有好多种,我一般用链表处理,这也是当初学长交给我的,先挂后找。

例:已知一组关键字(19,14,23,1,68,20,84,27,55,11,10,79),哈希函数为:H(key)=key MOD 13,
   用链地址法处理冲突:



先把他们用链表存起来,然后找。

struct node  
{  
    int date;  
    struct node *next;  
}*h[N];  
void gua (int x)  //先把链表挂上
{  
    int a=x%N;  
    struct node *p;  
    p=(struct node *)malloc(sizeof(struct node ));  
    p->date=x;  
    p->next=h[a];  
    h[a]=p;  
}  
int findx (int x)  //再寻找
{  
    int a = x%N;  
    int count  = 0;  
    for (struct node *p = h[a]; p; p = p->next)  
    {  
        if (p->date == x)   
            count ++;  
    }  
    return count ;  
}  

http://blog.csdn.net/u013486414/article/details/30826753  这道题可以好好看一下






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rocky0429

一块也是爱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值