人们说它需要摊销 O(1) 才能放入哈希表。因此,放置 n 个元素必须是 O(n)。然而,对于大 n 而言,情况并非如此,因为正如一位回答者所说,“满足预期摊销 O(1) 所需的只是扩展表并在发生冲突时使用新的随机散列函数重新散列所有内容。”
那么:将 n 个元素插入哈希表的平均运行时间是多少?我意识到这可能取决于实现,所以请提及您正在谈论的实现类型。
例如,如果有 (log n) 个等距碰撞,并且每次碰撞都需要 O(k) 来解决,其中 k 是哈希表的当前大小,那么您将具有以下递归关系:
T(n) = T(n/2) + n/2 + n/2
(也就是说,你花时间插入 n/2 个元素,然后你有一个冲突,需要 n/2 来解决,然后你在没有冲突的情况下进行剩余的 n/2 插入)。这仍然是 O(n),所以是的。但这合理吗?