我需要建议一个算法,采取BST(二进制搜索树),T1
有2^(n + 1) - 1
键,并建立一个具有相同键的AVL树。该算法应该在最差和平均时间复杂度方面有效(作为n
的函数)。建立AVL树的二进制搜索树
我不知道我该如何解决这个问题。很明显,具有2^(n + 1) - 1
密钥的BST的最小尺寸是n
(并且如果它是完整/平衡的,情况就是这样),但它对我有什么帮助?
存在被每次加的T1
根部到AVL树,然后从T1
除去它遍历树,所述直线前进方法:
- 由于
T1
可能会失去平衡的删除可在最坏的情况下花费为O(n) - 插入到AVL将花费O(log n)的
- 有
2^(n + 1) - 1
因此,总共花费O(n*logn*2^n)
,这是可笑的昂贵。
但是我为什么要从T1
中删除?我在那里付了很多钱,没有什么好的理由。 所以我想,为什么不使用树遍历了T1
,并为每个节点,我拜访,把它添加到AVL树:
- 有
2^(n + 1) - 1
节点,以便穿越将耗资O(2^n)
(访问每个节点一次) - 将当前节点每次去AVL将耗资
O(logn)
因此,在总,这将花费O(logn * 2^n)
。 这是我能想到的最好的时间复杂性,问题是,它能以更快的速度完成吗?像在O(2^n)
? 某种方式,将插入到AVL树只需要O(1)?
我希望我很清楚,我的问题属于这里。
非常感谢你,
诺姆
非常感谢你的男人 – Noam
@Noam没问题,如果你找到了答案有帮助那么请不要忘记将其标记为已接受。祝你好运! –
会做。你也可以给我的问题+1,如果它是清楚和有用的。 – Noam