当前位置: 首页 > 知识库问答 >
问题:

BST上下一个/上一个函数的时间复杂度

能向晨
2023-03-14

我对在二进制搜索树中前进和后退的最坏情况效率感兴趣。

不平衡树:

   5
  /
 1 
  \
   2
    \
     3
      \
       4

看起来最坏的情况是4-

平衡树:

   2
  / \
 1   4
    / \ 
   3   5

最坏情况是2-

我认为BST的最坏情况是O(高度-1),对于平衡树是O(log n),对于不平衡树是O(n-1),这是对的吗?

共有2个答案

燕朝明
2023-03-14

如果您正在考虑按顺序遍历树,那么复杂性不会因平衡而改变。算法仍然是

 walk( Node n)
    walk( n.left )
    visit( n )
    walk( n.right )

每个步骤1个操作。

当你开始应用查找、插入和删除时,平衡就开始发挥作用了。

为了使这些操作处于O(log N)中,需要一个平衡树。

如果要在树定义的序列中查找下一个元素,可能需要遍历树的整个高度,当然,在平衡树中这是O(log N),在不平衡树中这是O(N)

管玉堂
2023-03-14

我认为BST的最坏情况是O(高度-1),对于平衡树是O(log n),对于不平衡树是O(n-1),这是对的吗?

是的,当从kk 1旅行时,您只需要向上或向下移动,而不需要两者兼而有之(因为不变量是左孩子

虽然O(高度-1)可以写成O(高度)(并且类似地写成O(n))。

 类似资料:
  • 假设T是具有n个节点和高度h的二叉查找树。T的每个节点x存储一个实数x。键。给出以下算法Func1(T. root)的最坏情况时间复杂度。你需要证明你的答案。 x.left() 对于最坏情况下的运行时,我认为这将是O(树的高度),因为这基本上类似于最小()或最大()二元搜索树算法。然而,它是递归的,所以我对是否将O(h)作为最坏的运行时编写有点犹豫。 当我考虑它时,最坏的情况是如果函数执行if(s

  • 问题内容: 有没有类似于.Net 和Java的属性。 问题答案: 使用List接口的方法获取对象。从那里,你可以使用,,,和方法来浏览列表。这是一个使用的非常简单的示例。 示例代码应打印“ A”。

  • 我非常努力地显示下一个&上一个按钮,不管它是否在我的wordpress主题上处于活动状态。我似乎想不出一个办法来让它工作。我正在尝试这样做:http://www.kinocreative.co.uk/hints-and-tips/wordpress-nextpreview-post-navigation-with-images-and-inactive-links/extracty but for

  • 如何计算以下函数的时间复杂度? 现在,我知道循环具有O(n)时间复杂度,但在这种情况下,I以更快的速度增长。一次又一次地迭代,我发现,对于每一个第m次迭代,I=m^2。但我仍然不知道如何计算大O。

  • 我从一个RPC服务接收到一个通用的类型实例,我要将该实例转换为类型实例,此操作的时间复杂度是多少?性能对我的应用程序至关重要。(对于像Java和C#这样的语言) 示例:或

  • 我写了一个函数来寻找目标值在给定数组中应该插入的位置。我们假设数组有不同的值,并按升序排序。我的解必须是O(log N)时间复杂度 此代码的复杂性是否为O(log N)?