C/C++教程

PAT (Advanced Level) 1145 Hashing - Average Search Time

本文主要是介绍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的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!