0

如果要按该顺序插入 n 个键 1,2,…,n,

(一个)。到正常的 BST(二叉搜索树)

(b)。到张开树

在每种情况下 (a), b) 的复杂性是多少?

这两种情况都是 O(log n) 吗?还是 (a) 的 O(log n) 和 (b) 的 O(M log n) ?

4

1 回答 1

2

根据 Wikipedia Splay 树的文章,平均插入时间是 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)。

于 2017-12-07T21:24:05.043 回答