当前位置: 代码迷 >> 综合 >> 几种比较好的哈希方法
  详细解决方案

几种比较好的哈希方法

热度:97   发布时间:2024-01-20 20:15:53.0
[哈希函数]
//1.第一种hash方法 
typedef long long LL;
const int HashMax = 1000003;
LL Hash[HashMax];
//y,w为需要哈希的两个值 
int MakeHash(int y, int w)
{LL situ=(LL)y<<24|w;//定义哈希策略 LL big=situ%HashMax;while( Hash[big]!=-1&&Hash[big]!=situ )big=(big<<1|1)%HashMax;if( Hash[big]==-1 )Hash[big]=situ;return big;
}
//2.邻接链表hash 
#define H 21997
int next[H],head[H];
void insert(int i)
{int key=(p[i].x*p[i].x+p[i].y*p[i].y)%H;next[m]=head[key];p[m].x=p[i].x;p[m].y=p[i].y;head[key]=m++;
}
int find(int x,int y)
{int key=(x*x+y*y)%H;register int i;for(i=head[key];i!=-1;i=next[i])if(p[i].x==x && p[i].y==y)return i;return -1;
}
//3.康托展开 
int cantor( node a )
{int ret=0;bool flag[10]={false};for( int i=0;i<9;i++ ){int k=a.eight[i];flag[k]=true;int p=0;for( int j=1;j<k;j++ )if( flag[j]==false )p++;ret+=p*fec[8-i];}return ret;
}
//4.
const int size=20345677;
int hash[size];
int sum[size];
const int key=1777;
const int MAX=1000000000;void Insert(int num)
{int temp=num;num=(num+MAX)%size;while( hash[num]!=MAX && hash[num]!=temp )num=(key+num)%size;hash[num]=temp;sum[num]++;
}int Find(int num)
{int temp=num;num=(num+MAX)%size;while(hash[num]!=MAX && hash[num]!=temp)num=(num+key)%size;if( hash[num]==MAX ) return 0;else return sum[num];
}

  相关解决方案