前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >POJ PKU 3631 Cuckoo Hashing 解题报告

POJ PKU 3631 Cuckoo Hashing 解题报告

作者头像
owent
发布2018-08-01 17:29:03
2910
发布2018-08-01 17:29:03
举报
文章被收录于专栏:owentowent

题目链接:http://acm.pku.edu.cn/JudgeOnline/problem?id=3631

我讨厌这么长的题目

这题是模拟那个Hash算法,有点像我之前转载的那篇文章里提到的Hash

打造最快的Hash表(转) [以暴雪的游戏的Hash为例] 这里是用两个Hash函数算出两个Hash值h1和h2,如果h1位置已经被占用就检查h2位置,如果都被占用就把原来的替换掉再给原来的字符串重新计算映射。这样下去可能出现死循环。会出现死循环就输出

rehash necessary

所有字符串都能被正常映射就输出

successful hashing

这题用DFS模拟就OK了

代码:

代码语言:javascript
复制
#include <iostream>
#include <cstring>
#include <cstdio>
#include <map>
using namespace std;
#define MAXN 10005

struct hashv
{
    int h1,h2;
};

hashv D[MAXN];
int T[MAXN];
bool inLoop[MAXN];

bool DFS(int pos);

int main()
{
    int t, m, n, i;
    scanf("%d", &t);
    while(t --)
    {
        memset(T, 0, sizeof(T));
        scanf("%d %d", &m, &n);
        for(i = 1; i <= m; i ++)
            scanf("%d %d", &D[i].h1, &D[i].h2);

        for(i = 1; i <= m; i ++)
        {
            memset(inLoop, false, sizeof(inLoop));
            if(!DFS(i))
            {
                printf("rehash necessary\n");
                break;
            }
        }
        if(i > m)
            printf("successful hashing\n");
    }
    return 0;
}

bool DFS(int pos)
{
    if( T[ D[pos].h1 ] == 0)
    {
        T[ D[pos].h1 ] = pos;
        return true;
    }
    else if( T[ D[pos].h2 ] == 0)
    {
        T[ D[pos].h2 ] = pos;
        return true;
    }
    else
    {
        if( !inLoop[ D[pos].h1 ] )
        {
            inLoop[ D[pos].h1 ] = true;
            int tmp = T[ D[pos].h1 ];
            T[ D[pos].h1 ] = pos;
            if( DFS(tmp) )
                return true;
            T[ D[pos].h1 ] = tmp;
        }
        if(!inLoop[ D[pos].h2 ])
        {
            inLoop[ D[pos].h2 ] = true;
            int tmp = T[ D[pos].h2 ];
            T[ D[pos].h2 ] = pos;
            if( DFS(tmp) )
                return true;
            T[ D[pos].h1 ] = tmp;
        }
    }
    return false;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2010-02-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档