哈希表的大小为11,日期安装在位置{3,5,7,9,6}中,如果在最坏情况2,11中未在列表中找到数据,则必须进行多少次比较, 6
答案 0 :(得分:0)
这很大程度上取决于术语的用途和哈希表的实现......
“大小为11的哈希表”可能意味着11个元素(特别是在C ++中.size()
是查找表中有多少元素的函数)或11个桶,但在此案件可能意味着后者;
“数据拟合”可能意味着每个铲斗位置都有一个数据(单数据),或者可能意味着可能有一个或多个(但如果后者的意图和“大小”不是桶的数量,没有答案)。
“多少比较”通常意味着密钥与密钥的比较,但实施时需要对桶内容与不[更多]值的哨兵进行比较
实现可能会使用每个桶的碰撞键列表来处理冲突,或者它可能会从散列到桶中重新散列或级联/跳过一组偏移量(位移列表)
< / LI>因此,如果我们假设11个桶,每个桶位{3,5,7,9,6}
只有一个数据项和按键比较,名义上每个桶的碰撞元素列表,则可能发生的最坏情况是与具有现有条目的存储桶的比较,这意味着按键比较然后是密钥与哨兵的比较。这可以满足“2”的答案。
如果系统使用位移列表或重新散列,通常无法防止多次访问同一个存储桶(这在统计上不太可能),因此没有“最坏情况”限制,不会放弃实现。
如果特定死亡的简单情况是位移递增以尝试下一个桶,它可能会在访问一串填充的桶并找到第一个空桶后放弃...给定{3,5,7,9,6}
最坏的情况是它将按键比较为5然后是6然后是7,然后与8处的哨兵进行比较,进行3或4次比较,具体取决于你如何计算。
如果大小表示元素的数量,那么11分布在{3,5,7,9,6}
上,只有当任何一个桶保持一个碰撞键列表时才会这样,那么如果其中4个桶只有一个键,剩下的桶可能有11-4 = 7,因此在失败之前可能会有7次键盘按键比较。
很难想象通过任何计数方法对产生6或11次比较的问题进行任何合理的解释。
如果有人在学术环境中问你这个问题,那么在考虑这个问题时可能会有一些具体的实施和符号约定。如果缺少这样的上下文,那么任何人都要求非常懒惰或者甚至不熟悉哈希表的基础知识。