当前位置: 首页 > news >正文

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.

http://www.jsqmd.com/news/93528/

相关文章:

  • Postman接口测试之postman设置接口关联,实现参数化
  • 论文研究内容怎么写?最强技巧让导师直接点头通过
  • 自动化工程:赋能产业升级的核心引擎,从原理到应用全解析
  • AutoGPT在文化遗产数字化保护中的作用探讨
  • Ubuntu20.04安装Miniconda并配置GPU版PyTorch全流程
  • 收藏必备!Agentic RAG:从RAG到Agent的智能进化之路
  • 中国2000-2024年500m分辨率逐月叶面积指数(LAI)数据集
  • 收藏!35岁程序员转大模型:合适吗?前景与落地指南
  • 5、编程中的函数、参数传递与数组应用
  • 【收藏必看】2025大模型技术岗位全景图:15大方向详解,助你成为AI人才
  • 光刻胶增感剂用4-羟基二苯基碘鎓盐
  • 光刻胶增感剂用全氟丁基磺酸盐
  • IPv6过渡技术:从双栈到自动隧道
  • 如何设计高可靠环境监控系统?从“五重告警机制”看现代以太网温湿度传感器的告警架构
  • LobeChat为何成为GitHub热门项目?核心优势全面剖析
  • 计算机毕业设计springboot舞蹈室管理系统 基于 SpringBoot 的舞蹈培训机构综合运营平台 SpringBoot 框架下的舞蹈教室智慧排课与学员服务系统
  • 企业AI落地关键一步:vLLM生产级推理部署方案
  • 使用 Python 高效删除 Excel 重复数据(Excel 去重方法详解)
  • 无人机转向操作对续航的影响:核心逻辑+省电技巧✅
  • Qwen3-14B支持32K长上下文,轻松应对长文档分析任务
  • 构建三维多晶模型及相关操作的探索
  • 最适合Java初学者学习的Java零基础入门教程
  • 计算机毕业设计springboot流浪猫狗救助领养平台管理系统 流浪动物救助与领养一体化平台的SpringBoot实现 基于SpringBoot的萌宠公益救助及在线领养系统
  • LobeChat支持流式输出吗?实时响应机制技术解析
  • 分布式锁原理深度解析:从理论到实践
  • 通过LobeChat引流精准客户,实现大模型Token持续销售
  • ThingsBoard-批量调整日期格式
  • 【Java】常用设计模式及应用场景详解
  • 测试环境管理的最佳实践
  • AutoGPT项目依赖项更新策略:保持组件最新