据我所知之间的时间复杂度AVL树和二叉搜索树在平均情况一样,用AVLS击败BSTS在最坏的情况。 这给了我一个暗示,AVLS总是比百般与他们进行互动,或许加入少许复杂BSTS优越,当涉及到平衡的实现。
没有任何理由任何人都应该首先使用BSTS代替AVLS?
据我所知之间的时间复杂度AVL树和二叉搜索树在平均情况一样,用AVLS击败BSTS在最坏的情况。 这给了我一个暗示,AVLS总是比百般与他们进行互动,或许加入少许复杂BSTS优越,当涉及到平衡的实现。
没有任何理由任何人都应该首先使用BSTS代替AVLS?
首先,获得最佳的性能不编程的最终目标。 所以,即使选择B总是更快,比A消耗更少的内存,这并不意味着它总是更好的选择,如果是更复杂。 更复杂的代码需要更长的时间来写,是很难理解,更可能包含bug。 因此,如果简单,但效率较低的选项A是对你不够好,那么就意味着它是更好的选择。
现在,如果你想不均衡,那么AVL会消耗更多的内存比较AVL树与简单的二叉搜索树(BST)(每个节点必须记住它的平衡因子)和每个操作可以慢(因为你需要保持平衡因子,有时进行旋转)。
正如你所说,没有平衡BST有一个非常坏的(线性) 最坏的情况 。 但是,如果你知道这个最坏的情况不会发生在你身上,或者如果你没关系,如果操作是在罕见的情况下速度慢,不均衡BST可能比AVL更好。
由于是核对和更新的平衡因素和旋转节点的额外开销,相对于非平衡BST的当插入和删除在AVL树可能相当缓慢。
因为时间紧平衡,搜索决不会采取类似线性时间,所以你可能会想在情况下使用AVL树,其中搜索是不是更新树更频繁操作。
我的假设是:当你提到BST,你说的是BST不均衡。
可以这样说,如果你需要一个导航的数据结构,你知道你的数据不会是最坏的情况下(排序),是有点小,一个BST(无余额)就足够了。
但更有可能的是一个罕见的病例。
AVL树也是BST但它可以重新调整自己。 这种行为使得它在最坏的情况下更快。 它使自身的再平衡,从而在最坏的情况下会消耗O(log n)的时候平原BST将采取为O(n)。 所以,回答你的问题:它始终是更好地执行比只是普通的BST AVL树。