Skip to content

哈希和哈希表

哈希 Hash

应用:将一串字符串转变为数字

字符串哈希核心代码:

typedef unsigned long long ULL;
const int b=26;//进制 
ULL hash()
{
    ULL sum=0;
    for(int i=1;i<=m;++i)
        sum=sum*b+(ULL)(s[i]-'a'+1);//b进制 
    return sum;
}

哈希表 Hash Table

例题:Code

核心代码

//x、y为一个元素的两个哈希值,使用双哈希思想处理哈希冲突
void insert(int x,int y)                        //将元素插入哈希表
{
    //所有 x 值相同的字符串会储存在一条链表上,用 y 值区分
    nxt[++tot]=poi[x];
    poi[x]=tot;
    end[tot]=y;
}

int query(int x,int y)
{
    for(int i=poi[x];i;i=nxt[i])                //找到则表示存在
    {
        if(end[i]==y)
        {
            return 1;
        }
    }
    return 0;                                   //不存在返回 0
}

Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.