运行 将 N 个元素添加到空 AVL 树中的时间

Running time of adding N elements into an empty AVL tree

"minimum nodes for an avl tree in height h" 的公式是递归的: n(0)=1, n(1)=2 n(h)= 1+n(h-1)+n(h-2)

另一方面,我在互联网上找到了这个,用于解释将 N 个元素添加到空 avl 树的复杂性:

Well, imagine the tree being built.
One by one, the elements go through the tree nodes, and chose their abode by          taking either a left or a right. The tree balances itself every time the heights   are too skewed.

Of course, the cost of balancing the tree is an O(1) operation, so I do not consider that in the complexity analysis.

Complexity: log(1)+log(2)+log(3)+....+log(n)
=log(n!)
=O(nlogn-n+O(log(n)))
=O(nlogn)

但这是我不明白的,为什么计算是 log(n!) 如果不是每次我添加一个元素时高度都会增加?由于所提供的递归公式适用于大 N,avl 高度仅在很多元素之后增加,所以渐近地它不应该比 log(n!) 更好吗?

还有,最坏的情况是什么?在这种复杂的情况下,是否存在更坏的情况和最好的情况?例如,假设我要添加特定的 N 个元素,对于不同的运行是否有更好的 运行 时间?或者我可以说它是从高级知道每个元素将被添加到哪里所以 运行 时间有限吗?

更简单的上界解释

如果你有 n 个元素,一次插入最多需要 log(n) 次。如果我们假设所有 n 项的最坏情况插入时间,那么您将得到 O(n*log(n)) 而无需复杂的解释。

另一种看待它的方式是:

log(1) + log(2) + log(3) + ... + log(n) < n*log(n) = log(n) + log(n) + ... +日志(n)