如果要按顺序插入n键1,2,...,n,
(a)中。到正常的BST(二进制搜索树)
(b)中。到一个Splay树
每种情况(a),b)的复杂性是什么?
这两种情况都是O(log n)吗?或者(a)是O(log n),(b)是O(M log n)?
答案 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)。