zoukankan      html  css  js  c++  java
  • PAT A1078 Hashing

    这是一道哈希散列的二次方探查法的问题,其中也用到了素数的判定问题,要注意的是:1不是素数
    哈希散列中的二次方探查法主要流程如下:

    • 如果hashTable里面key % size的下标对应的hashTable为false,说明这个下标没有被使用过,直接输出。(这些size必须满足题目给的条件,即是一个素数)
    • 否则step步长从1加到size-1,一次次尝试是否能使index = (key + step * step) % size;所对应的位置没有元素,如果都没有找到就输出“-”,否则就输出这个找到的元素的位置
    #include<cstdio>
    #include<math.h>
    using namespace std;
    
    const int M = 10010;
    bool ishash[M];
    bool isprime(int n){
        if(n==1) return false;//1不是素数
        int half = (int)sqrt(n);
        for(int i = 2;i<=half;i++){
            if(n%i==0) return false;
        }
        return true;
    }
    int main(){
        int m , n;
        scanf("%d %d",&m,&n);
        while(!isprime(m)){
            m++;
        }//找新m,为素数
        int v;//读数
        //输出
        for(int i = 0;i < n;i++){
            scanf("%d",&v);
            int a = v%m;//0..m-1
            int k = 1;
            //二次方探查法
            while(k<m&&ishash[a]){
                a= (v + k*k)%m;
                //探测点
                k++;
            }
            if(k>=m){
                printf("-");
            }else{
                ishash[a] = true;
                printf("%d",a);
            }
            if(i < n-1){
                printf(" ");
            }
        }
    }
    
  • 相关阅读:
    spring boot下WebSocket消息推送(转)
    实时Web的发展历史
    mysqldump使用大全
    MYSQLDUMP参数详解(转)
    springboot页面缓存和url缓存实例
    在linux下运行jmeter
    jmeter测试http请求使用csv参数
    maven分开打包jar文件和依赖jar包和资源文件
    log4j DatePattern 解惑
    log4j使用示例
  • 原文地址:https://www.cnblogs.com/shuibeng/p/13562543.html
Copyright © 2011-2022 走看看