刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!

简答题

4.整型关键字的平方探测法散列
本题的任务很简单:将给定的无重复正整数序列插入一个散列表,输出每个输入的数字在表中的位置。所用的散列函数是 H(key) = key % TSize,其中 TSize 是散列表的表长。要求用平方探测法(只增不减,即H(Key)+i2)解决冲突。
注意散列表的表长最好是个素数。如果输入给定的表长不是素数,你必须将表长重新定义为大于给定表长的最小素数。
时间限制:4000
内存限制:65536
输入
首先第一行给出两个正整数 MSize(≤ 104)和 N(≤ MSize),分别对应输入的表长和输入数字的个数。随后第二行给出 N 个不重复的正整数,数字间以空格分隔。
输出
在一行中按照输入的顺序给出每个数字在散列表中的位置(下标从 0 开始)。如果某个数字无法插入,就在其位置上输出 `-`。输出间以 1 个空格分隔,行首尾不得有多余空格。
样例输入
4 4
10 6 4 15
样例输出
0 1 4 -

使用微信搜索喵呜刷题,轻松应对考试!

答案:

解析:

本题主要考察散列表(哈希表)的实现以及平方探测法解决冲突的策略。

  1. 读取输入:使用标准输入读取表长 MSize 和数字个数 N。
  2. 素数判断与重新定义:若 MSize 不是素数,需找到大于 MSize 的最小素数并重新定义表长。可以使用素数判断算法(如试除法)来实现。
  3. 初始化散列表:根据找到的素数表长,初始化一个数组作为散列表,所有位置默认为空。
  4. 计算哈希值:对于每个输入的数字,使用散列函数 H(key) = key % TSize 计算其哈希值。
  5. 平方探测法解决冲突:若计算出的哈希值位置已被占用(即散列表中该位置已有数字),则使用平方探测法寻找下一个可用的位置。具体实现时,可以使用一个探测次数 i,初始化为 0,然后不断尝试 H(key) + i^2 的位置,直到找到空位置或探测次数超过某个阈值。
  6. 插入数字并记录位置:在找到的位置插入数字,并记录下每个数字插入的位置。
  7. 输出结果:按照输入的顺序,输出每个数字在散列表中的位置。若某个数字无法插入(即散列表中所有位置均被占用且无法通过平方探测法找到空位置),则对应位置输出“-”。

注意:在实现过程中需要注意处理数组边界情况,确保探测过程不会超出数组范围。同时,由于内存限制为 65536,需要合理选择表长和数据类型,以确保内存使用合理。

创作类型:
原创

本文链接:4.整型关键字的平方探测法散列本题的任务很简单:将给定的无重复正整数序列插入一个散列表,输出每个输入

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。

让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!

分享考题
share