本文主要是介绍PAT (Advanced Level) 1145 Hashing - Average Search Time,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
哈希,开放寻址法,平方探测法
插入和查找的过程是等价的,都是判断当前位置是否为空或者k是否超出Msize
#include<bits/stdc++.h>
using namespace std;
const int N = 1e4+10;
int Msize,n,m;
int h[N];
bool is_prime(int x){
if(x==0 || x==1) return false;
for(int i=2;i<=x/i;i++)
if(x%i==0) return false;
return true;
}
int find(int x,int &cnt){
int sta=x%Msize,pos=sta;
cnt=1;
for(int k=0;k<Msize;k++,cnt++){
int pos=(sta+k*k)%Msize;
if(!h[pos] || h[pos]==x) return pos;
}
return -1;
}
int main(){
cin>>Msize>>n>>m;
while(!is_prime(Msize)) Msize++;
for(int i=1;i<=n;i++){
int a,cnt;
cin>>a;
int p=find(a,cnt);
if(p==-1) printf("%d cannot be inserted.\n",a);
else h[p]=a;
}
int res=0;
for(int i=1;i<=m;i++){
int a,cnt;
cin>>a;
find(a,cnt);
res+=cnt;
}
printf("%.1f",(double)res/m);
return 0;
}
这篇关于PAT (Advanced Level) 1145 Hashing - Average Search Time的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!