0
点赞
收藏
分享

微信扫一扫

A1145 Hashing - Average Search Time (25 分| hash映射| 哈希表| 平方探测法,附详细注释,逻辑分析)


写在前面

  • 思路分析
  • 计算大于msize最⼩素数,并赋值msize
  • 建立长度为msize的数组。
  • 平⽅方探测法插⼊a,迭代下标​​pos = (a + j * j) % msize​
  • 插⼊失败,输出”X cannot be inserted.”
  • 计算平均查找时间,迭代计算pos = (a + j * j) % msize
  • 找到​​v[pos]==a​​,退出循环
  • v[pos]不存在,表示没找到,退出循环
  • ans除以m得到平均查找时间,然后输出
  • 题目基础,15分钟a题

测试用例

input:
4 5 4
10 6 4 15 11
11 4 15 2

output:
15 cannot be inserted.
2.8

ac代码

#include <iostream>
#include <vector>
using namespace std;

bool isprime(int a)
{
if(a<=1) return false;
for(int i=2; i*i<=a; i++)
if(a%i==0) return false;
return true;
}
int main()
{
int msize, n, m, a;
scanf("%d %d %d", &msize, &n, &m);

while(!isprime(msize)) msize++;

vector<int> v(msize);
for(int i=0; i<n; i++)
{
scanf("%d", &a);

int flag = 0;
for(int j=0; j<msize; j++)
{
int pos = (a + j*j) % msize;
if(v[pos]==0)
{
v[pos] = a;
flag = 1;
break;
}
}
if(!flag) printf("%d cannot be inserted.\n", a);
}
int ans = 0;
for(int i=0; i<m; i++)
{
scanf("%d", &a);
for(int j=0; j<=msize; j++)
{
ans++;
int pos = (a+j*j)%msize;
if(v[pos]==a || v[pos]==0) break;
}
}
printf("%.1lf", ans*1.0/m);

return 0;
}

参考文章

  • ​​A1078 Hashing (25 分| 素数| 平方探测法,附详细注释,逻辑分析)​​
  • 可对比分析
  • ​​1145. Hashing – Average Search Time (25) – 甲级​​


举报

相关推荐

0 条评论