BST和Splay树中1 ... n键的插入操作的复杂性是多少?

时间:2017-12-07 17:29:49

标签: algorithm time-complexity binary-search-tree insertion splay-tree

如果要按顺序插入n键1,2,...,n,

(a)中。到正常的BST(二进制搜索树)

(b)中。到一个Splay树

每种情况(a),b)的复杂性是什么?

这两种情况都是O(log n)吗?或者(a)是O(log n),(b)是O(M log n)?

1 个答案:

答案 0 :(得分:2)

根据维基百科Splay tree文章,平均插入时间为O(log n),最差情况为摊销O(log n)。因此,将所有项目插入Splay树的预期时间为O(n log n)。

二进制搜索树案例取决于您使用的BST类型。对于原始BST,按顺序插入项是最坏的情况,因为它创建了一个退化树 - 一个链表。那是每次插入的O(n)(其中n是树中的项目数)。因此,插入所有项目将需要O(n ^ 2)。

插入退化树是O(n),因为树本质上是一个链表。按顺序插入数字[1, 2, 3]后,您的树看起来像这样:

1
 \
  2
   \
    3

如果您想插入4,代码必须查看每个现有项目1,2和3,然后再添加4作为3的右子项。当您去插入时5,它还必须查看前四个项目。每次插入都必须查看以前的所有项目。插入n个项目时的比较总数为(n*(n-1))/2,即O(n ^ 2)。

如果您使用自平衡二进制搜索树,则插入为O(log n),并且插入所有项目将需要O(n log n)。