二叉搜索树的搜索时间

时间:2009-02-08 23:59:59

标签: runtime binary-tree analysis

有谁知道如何计算二叉搜索树的搜索时间(即最坏情况,最佳情况和平均情况)?

3 个答案:

答案 0 :(得分:31)

对于非自平衡树(可能但搜索树不常见),最坏的情况是O(n),这是退化二叉树(链表)。

在这种情况下,您必须在找到所需元素之前平均搜索一半列表。

对于完美平衡的树,最好的情况是O(log 2 n),因为您将每个树级别的搜索空间减半。

平均情况介于这两者之间,完全取决于数据: - )

由于您很少控制将数据插入树中的顺序,因此通常优选自平衡树,因为虽然它们为每次插入或删除添加了少量时间,但它们大大加快了搜索速度。他们最糟糕的情况比不平衡的树好得多。

                 8
         _______/ \_______
        /                 \
       4                  12
    __/ \__             __/ \__
   /       \           /       \
  2         6        10        14
 / \       / \       / \       / \
1   3     5   7     9  11    13  15

在这个完美平衡的树中,您可以看到每个n级别得到2个 n -1个节点。这意味着对于15个节点,您永远不必搜索超过四个节点来查找它(例如,要查找13,您搜索81214和{ {1}})。这就是log 2 n图的来源。

如前所述,退化的不平衡树是一个链表。如果您的数据按顺序到达并将其插入到不平衡的二叉树中,您将获得:

13

要查找1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9 -+ | +------------------------------------------+ | +-> 10 -> 11 -> 12 -> 13 -> 14 -> 15 ,您需要搜索13123456789101112,因此O (n)的

答案 1 :(得分:12)

可能希望将此标记为“作业”。这是一个很好的起点:http://en.wikipedia.org/wiki/Binary_search_tree

通常,平衡二进制搜索树具有O(log n)的最坏情况查找,O(1)的最佳情况(当期望值是根时)和平均值O(log n)的情况(叶子的值比其父亲的指数值多)。

最糟糕的情况是最有趣的,并且通过识别二叉树的第一级具有1个节点,第二级具有2,第三级具有4等等而容易看出。因此,深度 n 的二叉树中的节点数精确地 2 ^ n - 1 。指数函数的数学逆是对数,因此: O(log n)

不平衡树可能与链表一样糟糕,可能具有如下形状:

  1
 / \
    2
   / \
      3
     / \
        4
       / \

在这种情况下,最坏情况下的访问时间为 O(n)

答案 2 :(得分:2)

最好的情况是O(1)。第一个元素可能是您要查找的项目。最坏的情况是O(n),即在偏斜的树中,平均情况是O(lg n)。