1145 Hashing - Average Search Time

news/2024/7/3 7:25:15

目录

思路

样例解释

AC代码


思路

要做出这道题必须直到除留余数法和平方探测法的原理。

除此之外有两个注意点:

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次。(更正,根据题意应该再加一次(15+5^2)%5 == 0,没找到

对于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 timefor(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;
}

http://lihuaxi.xjx100.cn/news/240871.html

相关文章

[ExtJS5学习笔记]第五节 使用fontawesome给你的extjs5应用添加字体图标

本文地址&#xff1a;http://blog.csdn.net/sushengmiyan/article/details/38458411本文作者&#xff1a;sushengmiyan-------------------------------------------------资源链接--------------------------------------------------------FontAwesome glyph编码&#xff1a;…

Equifax再陷风波:一门户网站管理员密码是admin/admin

据外媒报道&#xff0c;又一个Equifax门户网站被指存在安全协议问题。最先发现这个的Hold Security LLC指出&#xff0c;一个负责管理信用报告纠纷&#xff08;内含个人信息&#xff09;的新Equifax门户网站使用的是用户名和密码都为admin的用户名/密码数字通道。该门户网站叫V…

1085 Perfect Sequence

明确题目的核心是要找到 找到第一个满足 M > m*p 的M的下标。然后用该下标减去起点的下标即为序列元素个数。 二分区间应当是M所有可能的取值范围。起点是i1&#xff0c;终点是N而不是N-1&#xff0c;虽然A[N]上无元素。注意啊&#xff0c;原题要找的M是小于等于m*p的&…

Linux (x86) Exploit 开发系列教程之十一 Off-By-One 漏洞(基于堆)

Off-By-One 漏洞&#xff08;基于堆&#xff09; 译者&#xff1a;飞龙 原文&#xff1a;Off-By-One Vulnerability (Heap Based) 预备条件&#xff1a; Off-By-One 漏洞&#xff08;基于栈&#xff09;理解 glibc mallocVM 配置&#xff1a;Fedora 20&#xff08;x86&#xff…

【Appium】Appium+Python环境搭建

环境准备&#xff1a; 1.jdk 2.android-sdk 3.python 4.Node.js 5.appium 6.Appium-Python-Client 1. 下载jdk1.7&#xff1a;http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html 1&#xff09;如果系统中存在其他版本…

PAT(甲级)2021年秋季考试summary

91 分 排名大概是1/3的段位 第一题是定义了一个特殊的数据结构&#xff0c;我用二分法做&#xff0c;样例通过了&#xff0c;但是得分11/20&#xff0c;测试用例只过了前两个&#xff0c;死活通不过其他的。问题出在declare这个词上&#xff0c;最后不是问输出了多少数组&…

计算机会议排名等级

http://blog.sina.com.cn/s/blog_9c411c310102vs2g.html 附件是计算机领域的学术会议等级排名情况&#xff0c;分为A, A, B, C, L 共5个档次。其中A属于顶级会议&#xff0c;基本是这个领域全世界大牛们参与和关注最多的会议。国内的研究者能在其中发表论文的话&#xff0c;是很…

可能是 nginx 限速最容易理解的说明

nginx 限速研究汇报 写在前面 这两天服务器带宽爆了&#xff0c;情况如下图&#xff1a; 出于降低带宽峰值的原因&#xff0c;我开始各种疯狂的研究nginx限速。下面是我研究过程中的心得&#xff01;&#xff08;花了好几个小时的时间写的人生第一篇技术类网文&#xff09; 限速…