爆刷PAT(甲级)——之【1145】 Hashing - Average Search Time(25 分)——Hash

艰难的英语单词:

Quadratic probing    平方探测

increments    英 ['ɪnkrəmənts]        n.增量;

题意:给一串数,把它们按照 num%v 哈希,如果有冲突就按照平方探测法正向解决冲突,哈希不进去就输出失败。

然后给一部分刚刚的数,判断它们是否在哈希入了表内。并最后输出总共进行了多少次查询。

难点:其中好几个概念都不是很清楚——平方探测是啥、哈希的查询次数咋算什么的。

后来写代码的时候还有一个地方不理解,为什么对于每一个数值,判断它们是不是哈希成功的时候,j 的变化是从0到MAX(包括MAX),这是什么原因?因为很明显,大多数时候,用平方探测法解决冲突时候,哈希的新位置是会出现循环的,也就是说没必要使j从0到MAX才对。

上述疑问还不是很清楚答案,先按照题目的写法,把这题目AC了。

Code:

#include
using namespace std;
#define inf 10009
#define INF 0x3f3f3f3f
#define loop(x,y,z) for(x=y;x

 

你可能感兴趣的:(PAT甲级【爆刷】)