news 2026/6/1 9:44:39

PAT 1145 Hashing - Average Search Time

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PAT 1145 Hashing - Average Search Time



这一题的大意是给出一个哈希表的大小,如果不是质数,就把它变成和它最近的大的质数。
然后给出N个数,把这N个数插入到哈希表中,如果不能插入输出:x cannot be inserted.
然后给出M个数,判断它们在不在哈希表中,并且统计找到它们需要查询的次数的平均值。
当出现哈希冲突的时候,采用平方探测法
这一题我们只需要清楚平方探测法就好写,剩下就是模拟哈希表的过程。
平方探测法:

for(intk=0;k<msize;k++){if(hash[(x+k*k)%msize]==x){cnt++;returncnt;}elseif(hash[(x+k*k)%msize]==0){cnt++;returncnt;}else{cnt++;}}

就是加上一个k*k的平方。
最终的代码按题意模拟即可:
完整代码如下:

#include<bits/stdc++.h>#include<iostream>usingnamespacestd;intMSize;intN;intM;boolisprime(intx){if(x==0||x==1){returnfalse;}if(x==2){returntrue;}for(inti=2;i<sqrt(x)+1;i++){if(x%i==0){returnfalse;}}returntrue;}intprime(intx){if(isprime(x)){returnx;}else{//找离x最近的质数for(inti=x+1;i<=1e5;i++){if(isprime(i)){returni;}}}}intquery(intx,intmsize,inthash[]){intcnt=0;for(intk=0;k<msize;k++){if(hash[(x+k*k)%msize]==x){cnt++;returncnt;}elseif(hash[(x+k*k)%msize]==0){cnt++;returncnt;}else{cnt++;}}if(cnt==msize){returncnt+1;}if(cnt==0){return0;}}intmain(){cin>>MSize>>N>>M;intmsize=prime(MSize);//因此哈希表的大小是5inthash[msize];memset(hash,0,sizeof(hash));for(inti=0;i<N;i++){intkey;cin>>key;if(hash[key%msize]==0){hash[key%msize]=key;}else{//说明发生哈希碰撞intk=1;boolflag=0;while(hash[(key+k*k)%msize]!=0){if(k>=msize){flag=1;break;}k++;}if(flag==1){cout<<key<<" cannot be inserted."<<endl;}else{hash[(key+k*k)%msize]=key;}}}intans=0;for(inti=0;i<M;i++){intx;cin>>x;intt=query(x,msize,hash);ans+=t;}printf("%.1f\n",(double)ans/M);return0;}

注意如果查找某一个值的时候,发现在哈希表中的位置为空,说明这个值不在哈希表中,如果查询了所有可能的值,但仍然没有查到某一个元素,那么查询次数应该是哈希表大小+1.

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/31 7:53:52

Postman接口测试之postman设置接口关联,实现参数化

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 postman设置接口关联 在实际的接口测试中&#xff0c;后一个接口经常需要用到前一个接口返回的结果&#xff0c; 从而让后一个接口能正常执行&#xff0c;这个过程…

作者头像 李华
网站建设 2026/5/31 11:26:08

AutoGPT在文化遗产数字化保护中的作用探讨

AutoGPT在文化遗产数字化保护中的作用探讨 在博物馆的修复工作室里&#xff0c;一位研究员正面对成堆的古籍扫描件发愁——这些来自明清时期的文献不仅字迹模糊、纸张破损&#xff0c;更棘手的是它们分散在全国十几个数字档案馆中&#xff0c;元数据格式不一&#xff0c;连目录…

作者头像 李华
网站建设 2026/5/28 1:57:28

【Java】常用设计模式及应用场景详解

设计模式分为三大类&#xff1a;创建型&#xff08;5种&#xff09;、结构型&#xff08;7种&#xff09;、行为型&#xff08;11种&#xff09;&#xff0c;以下是 Java 开发中最核心、高频使用的模式及真实场景 一、创建型模式&#xff08;Creational Patterns&#xff09; …

作者头像 李华
网站建设 2026/5/31 22:01:51

面向软件测试从业者的架构设计智能验证方案

1 引言&#xff1a;架构验证的测试专业化转型 在微服务、云原生架构主流的当下&#xff0c;软件测试工程师的传统工作边界正被重新定义。2025年的技术环境中&#xff0c;架构缺陷导致的系统故障中&#xff0c;有67%在测试阶段未能有效识别&#xff08;来源&#xff1a;国际软件…

作者头像 李华
网站建设 2026/5/29 14:40:08

ThingsBoard-批量调整日期格式

在ThingsBoard-调整日期格式这篇文章中&#xff0c;讲解了如何在界面上调整日期格式。但在实际应用中&#xff0c;仪表板里的部件太多了&#xff0c;逐一调整费时费力而且容易遗漏&#xff0c;下面介绍直接调整JSON的方法&#xff0c;这种方法先将仪表板导出&#xff0c;调整之…

作者头像 李华
网站建设 2026/5/28 3:26:11

20、数据可视化管理界面的设计与工具应用

数据可视化管理界面的设计与工具应用 一、数据可视化的前期准备与图表选择 在设计自定义界面和仪表盘之前,了解什么是好的数据可视化以及什么不是至关重要。有很多方法会让数据可视化出错,而正确的方法却很少。建议阅读 Edward Tufte 的《The Visual Display of Quantitati…

作者头像 李华