当我学习二元搜索树(平衡和不平衡)时,我想出了我需要解决的问题:
如果构建二元搜索树(不需要平衡),使用n个元素,那么树构造的总时间复杂度是多少?
如果AVL树是由n个元素构成的,那么构建该AVL树的时间复杂度是多少?
是否应该超过nlog(n)?因为我们需要大量的旋转来进行AVL树构建。
我知道AVL树中的插入和删除操作将是log(n)顺序(如果使用随机元素构造的二叉搜索树具有log(n)高度,则同样如此)。
但我需要了解整体树构建成本及其变化方式,因为我需要使用平衡搜索树进行分类。
答案 0 :(得分:16)
让我们从构建AVL tree开始。要创建树,您必须在其中插入n
个元素。要在平衡树中插入元素,您需要log(n)
。因此,您最终得到O(n*log(n))
。
回到常规BST。这是违反直觉的,但这取决于你如何构建这棵树。如果您事先不知道BST的所有元素(online algorithm),那么您必须逐个插入每个n
元素。如果你非常不走运,插入的复杂性为O(n)
,因此它会恶化到O(n^2)
。
请注意,这种情况极不可能,但仍有可能。
但如果事先了解所有元素,您仍然可以实现O(nlog(n))
。您可以对它们进行排序O(nlog(n))
,然后按以下顺序插入元素。 Take the middle element and insert it as a root,然后递归地对剩下的两个部分做同样的事情。您最终将使用n
插入log(n)
元素来创建平衡的BST。
答案 1 :(得分:7)