当前位置:  开发笔记 > 编程语言 > 正文

二叉搜索树的搜索时间

如何解决《二叉搜索树的搜索时间》经验,为你挑选了2个好方法。

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



1> paxdiablo..:

对于非自平衡树(搜索树可能但不常见),最坏的情况是O(n),它用于简并二叉树(链表).

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

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

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

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

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

在这个完美平衡的树中,您可以看到每个级别都有2 n -1个节点n.这意味着15个节点,你从来没有搜索超过四个节点找到它(例如,要查找13,你搜索8,12,1413).这就是log 2 n数字的来源.

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

1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9 -+
                                           |
+------------------------------------------+
|
+-> 10 -> 11 -> 12 -> 13 -> 14 -> 15

为了找到13在这种情况下,你需要搜索1,2,3,4,5,6,7,8,9,10,11,1213,因此为O(n).



2> Daniel Spiew..:

可能想把这个标记为"作业".这是一个很好的起点: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).


不平衡树是任何不完全平衡的树(即,一个子树的深度与另一个子树的深度不同).你所指的(链表)是一个退化树.
推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有