1145 Hashing - Average Search Time
Posted CSU迦叶
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1145 Hashing - Average Search Time相关的知识,希望对你有一定的参考价值。
目录
思路
要做出这道题必须直到除留余数法和平方探测法的原理。
除此之外有两个注意点:
1. 在查找时,如果当前位置上不是要找的数会继续找下去(如果k没超过表长的话),但是如果当前位置上是0,说明表里就是没有这个数,不必再往下找。
2. 在存储时,k的取值范围是[0,Tsize)而在查找时是[0,Tsize],我认为后者也应该是左闭右开,但是要做出这道题就得按照它的规则。
样例解释
表长4不是一个素数,取大于4的第一个素数5作为表长。
有table[5] = {0,0,0,0,0}
对于10:10%5 == 0,table[0]是空的,可以插入,更新table[5] = {10,0,0,0,0}
对于6:6%5 == 1,table[1]是空的,可以插入,更新table[5] = {10,6,0,0,0}
对于4:4%5 == 4,table[4]是空的,可以插入,更新table[5] = {10,6,0,0,4}
对于15:15%5 == 0,table[0]非空,(15+1^2)%5 == 1,table[1]非空,(15+2^2)%5 == 4,table[4]非空,(15+3^2)%5 == 4,(15+4^2)%5 == 1,4已经是表长减一,所以插不进去了。
对于11:11%5 == 1,table[1]非空,(11+1^2)%5 == 2,table[2]是空的。更新table[5] = {10,6,11,0,4}。
最终的存储情况是 {10,6,11,0,4}。
下面开始查询
对于11:11%5 == 1 ,table[1]存储的是6,(11+1^2)%5 == 2,table[2]存储的是11,2次找到。
对于4:4%5 == 4,table[4]存储的是4,1次找到。
对于15:15%5 == 0,没找到,(15+1^2)%5 == 1,没找到,(15+2^2)%5 == 4,没找到,(15+3^2)%5 == 4,没找到,(15+4^2)%5 == 1,没找到,5次。
对于2:2%5 == 2,没找到,(2+1^2)%5 == 3,没找到,注意3号位存储的为空,不必再往下找了。2次。
共计11次。
AC代码
#include<cstdio>
#include<vector>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<set>
#include<stack>
#include<cmath>
using namespace std;
const int maxn = 1010;
bool isPrime(int x){
if(x==1)return false;
for(int i=2;i<=sqrt(x);i++){
if(x%i==0)return false;
}
return true;
}
int main(){
int Tsize,inN,outN;
cin>>Tsize>>inN>>outN;
if(isPrime(Tsize)==false){
while(isPrime(Tsize)==false){
Tsize ++;
}
}
int Table[Tsize] = {0};
while(inN--){
int x;
cin>>x;
int k;
for(k=0;k<Tsize;k++){
int idx = (x+k*k)%Tsize;
if(Table[idx]==0){
Table[idx] = x;
break;
}
}
if(k==Tsize)printf("%d cannot be inserted.\\n",x);
}
int tt = 0;//total time
for(int i=0;i<outN;i++){
int x;
cin>>x;
for(int k=0;k<=Tsize;k++){
tt ++;
int idx = (x+k*k)%Tsize;
if(Table[idx]==x||Table[idx]==0)break;
}
}
printf("%.1f",tt*1.0/outN);
return 0;
}
以上是关于1145 Hashing - Average Search Time的主要内容,如果未能解决你的问题,请参考以下文章
1145 Hashing - Average Search Time
1145 Hashing - Average Search Time
1145 Hashing - Average Search Time (25 分)难度: 一般 / 知识点: 哈希表平均查找时间
PAT 甲级 1145 Hashing - Average Search Time (25 分)(读不懂题,也没听说过平方探测法解决哈希冲突。。。感觉题目也有点问题)
A 1145 Hashing - Average Search Time (25分)([哈希映射,哈希表,平?方探测法)