这道题需要额外补充的知识点是Quadratic probing和Average Search Time。题目都没有解释,需要知识储备,所以当年不知道这道题是难倒了多少人。
题目链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805343236767744
Quadratic probing (二次探测法)
简而言之,探测间隔为平方数。
处理冲突的函数为 H(key)=(key+i*i)%TSize {i=1,2,3,...}
本题的哈希函数为H(key)=key%TSize,也就是说,大小为5的数组,数字10放在第0位,因为10%5=0。
如果第0位已经有人了,处理冲突的办法就是10+1*1=11,11%5=1,去找第1位。
如果第1位已经有人了,处理冲突的办法就是10+2*2=14,14%5=4,去找第4位。
如果第4位已经有人了,处理冲突的办法就是10+3*3=19,19%5=4,去找第4位。
这个时候肯定是不行的了,要说 10 cannot be inserted.
Average Search Time (平均查找时间)
题目给出了计算的公式:查找的次数 / 查找的元素个数。
注意:
1.每次查找还是要按二次探测法来查找,不是挨个找,而且上面公式的那个i的范围是0到TSize。
所以查找的总次数=【每次查找不同取值j的个数】的和。
2.查找失败的标志是理应插入的位置上为0,不是别的数(否则就是碰撞)或者自己(否则就是查找成功)
所以查找时需要判断v[pos]==0,是的话要跳出查找,并且这个过程对查找次数的贡献也是跟查找成功的过程一样。

博客探讨PAT甲级试题中关于二次探测法和平均查找时间的问题,详细解释了二次探测法的冲突解决策略,并提供了计算平均查找时间的公式。内容包括如何在哈希表中应用二次探测法处理冲突,以及在查找过程中如何判断失败和成功。此外,还分享了可靠的代码参考和知乎上的相关讨论。
最低0.47元/天 解锁文章
267

被折叠的 条评论
为什么被折叠?



