使用 AVL 树和单独链接的 Hashmap 的时间复杂度

问题描述

干杯,我正在使用单独的链接和 AVL 树作为桶来实现一个哈希图,但我在证明一些时间复杂性时遇到了一些麻烦。我必须找到最坏和平均的时间复杂度,以及摊销与实时复杂度。所以基本上我有 4 种不同的复杂性组合(平均摊销时间平均实际时间最坏情况摊销最坏情况实时)。我的主要问题是我不知道我应该在哪种组合中计算我所做的重新哈希。 我现在要解释一些关于我的方法的更多事情:

当插入一个项目时,我首先散列它的键并在散列位置插入树中。该插入可能需要 O(log(k)) 复杂度,其中 k

在重新哈希中:

首先,我分配了一个具有双倍容量的新哈希映射,然后为该新容量哈希映射的每个位置创建树,因此我对哈希映射容量进行了一次迭代。然后我遍历旧的哈希图,访问其中的每棵树和每个节点,并使用插入将其重新添加到哈希图中(因此我再次调用 hashmap_insert),因此它散列到正确的位置。但是,在遍历树时,我首先获取该树的第一个节点,并且对于该树中的每个节点,我调用一个名为 tree_next 的函数,该函数给定一个节点返回该树中的下一个节点,花费 O(logn) 时间,其中 n 是该树中的元素数。然而,因为我们保持树相对“短”,所以我们可以假设它是 O(1)。那是什么时候?当我们研究摊销时间,或平均?或者在研究它们的组合时(平均摊销时间)?

我希望得到一些帮助!谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)