字符串哈希之ELFHash,poj2503

Posted 请叫我凯凯大人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符串哈希之ELFHash,poj2503相关的知识,希望对你有一定的参考价值。

#include <iostream>
#include<cstdio>
#include<cstring>
using namespace std;

const int M = 149993;

typedef struct
{
    char e[11];
    char f[11];
    int next;
}Entry;
Entry entry[M];
int i = 1;
int hashIndex[M];//哈希表

int ELFHash(char *key)
{
    unsigned long h=0;
    while(*key)
    {
        h=(h<<4)+(*key++);
        unsigned long g=h&0Xf0000000L;
        if(g) h^=g>>24;
        h&=~g;
    }
    return h%M;
}

void find(char f[])
{
    int hash = ELFHash(f);
    for(int k = hashIndex[hash]; k; k = entry[k].next)
    {
        if(strcmp(f, entry[k].f) == 0)
        {
            printf("%s\n",entry[k].e);
            return;
        }
    }
    printf("eh\n");
}

int main()
{
    char str[22];
    while(gets(str))
    {
        if(str[0] == \0)
            break;
        sscanf(str,"%s %s",entry[i].e,entry[i].f);//按格式给str赋值
        int hash = ELFHash(entry[i].f);
        entry[i].next = hashIndex[hash];
        hashIndex[hash] = i;
        i++;
    }
    while(gets(str))
        find(str);
    return 0;
}

 

以上是关于字符串哈希之ELFHash,poj2503的主要内容,如果未能解决你的问题,请参考以下文章

POJ 2503 Babelfish

字符串哈希算法(以ELFHash详解)

字符串哈希函数ELFHash的理解

poj 2503 哈希 Map 字典树

POJ2503 Babelfish

字符串哈希之Rabin-Karp,poj1200