hash(蛤席)

Posted

tags:

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

由于在9.17的比赛中深受第一题折磨,century说只要用hash就可以A(呸)

所以9.18(默哀1s)学了下hash

例题oj1335

#include<cstdio>

#include<algorithm>

#include<cstring>

using namespace std;

const int step=7;

const int modprime=2323237;

int hash[modprime+5];

int a[100100],b[100100],an,bn;

int tong=0;//记录相同元素个数

void init()

{

    memset(a,0,sizeof(a));

    memset(b,0,sizeof(b));

    scanf("%d",&an);

    for(int i=1;i<=an;i++)

    scanf("%d",&a[i]);   

    scanf("%d",&bn);

    for(int i=1;i<=bn;i++)

    scanf("%d",&b[i]);

}

int find(int k)//查找k元素

{

    int temp=k%modprime;

    while(hash[temp]!=k&&hash[temp]!=0)

    {

        temp+=step;

        if(temp>=modprime)

            temp-=modprime;

    }

    return temp;

 

}

void insert(int k)//插入hash表

{

    int now=find(k);

    hash[now]=k;

}

void check(int k)//在hash中查找元素

{

    int now=find(k);

    if(hash[now]==k)

        tong++;

}

void work()

{

    for(int i=1;i<=an;i++)

        insert(a[i]);

    for(int i=1;i<=bn;i++)

        check(b[i]);

}

int main()

{

    init();

    work();

    if(an==bn&&tong==an)

    {

        puts("A equals B");

        return 0;

    }

    if(an<bn&&tong==an)

    {

        puts("A is a proper subset of B");

        return 0;

    }

    if(an>bn&&tong==bn)

    {

        puts("B is a proper subset of A");

        return 0;

    }

    if(tong==0)

        puts("A and B are disjoint");

    else

        puts("I‘m confused!");

    return 0;

}

//hash hash Murs

————————————分割线———————————————

hash有几个要素:

先是要制作获取hash地址的find函数

在一个表中insert进去然后查询

以拉链式进行最后比较相同元素数并进行特判其实这种思想在之前的一个problem中就有体现,不记得题号了但是是以char所对应的int值来做下标查询,没有划水,hhhhh。

以上是关于hash(蛤席)的主要内容,如果未能解决你的问题,请参考以下文章

Hash算法与摘要

查询计划hash和查询hash

nginx 负载均衡之一致性hash,普通hash

算法设计之hash---hash 函数hash表

perl hash问题

hash·余数hash和一致性hash