这是一个家庭作业问题,我对它的正确方法感到非常困惑。
存在 m个插槽的哈希表。我们假设简单统一哈希假设(SUHA)。
我们执行n个插入操作,但所有n个元素都映射到插槽0.(这可能不太可能,但可能)。
现在问题是要求搜索随机密钥' x'其哈希值可能存在于表中,也可能不存在。 搜索完成后运行时的上限是什么?
这是我的方法:
由于我们假设SUHA,哈希到一个槽的密钥的概率是1 / m。如果密钥确实哈希到槽0,那么搜索需要O(n)时间,否则需要O(m-1)时间。通过这个逻辑,解是[1 / m] * O(n)+ [(m-1)/ m] * O(m-1),简化为O(n / m + [(m-1)) ^ 2] / M)。
1。可以通过这种方式将概率乘以渐近运行时间吗?
2。甚至可能在确定运行时方面起作用吗?
答案 0 :(得分:1)
我相信你正在考虑这个错误。概率不应该被考虑在内。由于问题是要求上限,将该问题翻译成最糟糕的情况是什么?
最糟糕的情况是,如果x像前面的每个哈希值一样哈希到0。现在想象x是最后一个哈希的元素。您必须遍历可能的位置,直到找到您要查找的元素,具体取决于冲突解决方案。这将使它成为O(n),因为它取决于问题中所示的n个先前哈希的数量。
最好的情况就是说,如果x没有哈希到0。由于计算哈希是O(1),一旦你哈希到一个密钥,它是否存在,另一个O( 1)整体操作,O(1)操作。
答案 1 :(得分:1)
上限意味着最坏的情况。
当您将概率设为'1 / m'时,您正在计算平均情况。
您现在可以尝试这个问题,而不是在下面,因为我将编写解决方案:
最糟糕的情况是:
在这种情况下,您将必须遍历该插槽的所有元素,从而导致O(n)的运行时间。