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

BST时间复杂度

钱展
2023-03-14

假设T是具有n个节点和高度h的二叉查找树。T的每个节点x存储一个实数x。键。给出以下算法Func1(T. root)的最坏情况时间复杂度。你需要证明你的答案。

Func 1 (x) 
    if (x == NIL) return 0; 
    s1 <- Func1(x.left()); 

    if (s1 < 100) then
       s2 <- Func1(x.Right());
    end
    else
       s2 <- 0; 
    end

    s <- s1 + s2 + x.Key(); 
    return (s); 

x.left()

对于最坏情况下的运行时,我认为这将是O(树的高度),因为这基本上类似于最小()或最大()二元搜索树算法。然而,它是递归的,所以我对是否将O(h)作为最坏的运行时编写有点犹豫。

当我考虑它时,最坏的情况是如果函数执行if(s1

共有1个答案

淳于升
2023-03-14

您说得对,此函数的最坏情况运行时是θ(n),如果if语句始终执行,则会发生这种情况。在这种情况下,递归访问每个节点,递归访问完整的右子树,然后递归访问完整的左子树。(它也为每个节点做O(1)工作,这就是为什么它的总和为O(n))。

 类似资料:
  • 我很难找出平均和最坏情况下的时间复杂度。因此,我使用以下逻辑删除了BST节点 删除二元搜索树中的节点时,有3种情况 那么,如何计算总体平均时间复杂度和最差时间复杂度??

  • 我有一种在二元搜索树(BST)中查找下一个顺序后续项的方法。“inorderSuccessor”方法将BST的任何节点作为输入,并输出下一个inorder后续节点。方法和树类定义如下: 假设BST的高度为h,并且此树结构中有n个节点。我知道“inorderSuccessor”方法的时间复杂度是O(h)。 我的问题是:给定BST的最小节点。当我编写一个方法来连续调用“inorderSuccessor

  • 给定一个高度为h的二叉查找树(BST),它需要O(k h)时间来连续应用BST Inorder后续算法k次,从任何节点开始,在先前调用返回的节点上应用每个下一个调用。 伪代码: 我如何证明这种时间复杂性? 特别是,我试图建立k和访问的节点数之间的关系,但在这里找不到任何模式。

  • 主要内容:时间复杂度,空间复杂度《 算法是什么》一节提到,解决一个问题的算法可能有多种,这种情况下,我们就必须对这些算法进行取舍,从中挑选出一个“最好”的。 算法本身是不分“好坏”的,所谓“最好”的算法,指的是最适合当前场景的算法。挑选算法时,主要考虑以下两方面因素: 执行效率:根据算法所编写的程序,执行时间越短,执行效率就越高; 占用的内存空间:不同算法编写出的程序,运行时占用的内存空间也不相同。如果实际场景中仅能使用少量的内

  • 我对在二进制搜索树中前进和后退的最坏情况效率感兴趣。 不平衡树: 看起来最坏的情况是4- 平衡树: 最坏情况是2- 我认为BST的最坏情况是O(高度-1),对于平衡树是O(log n),对于不平衡树是O(n-1),这是对的吗?

  • 有人能帮我了解一下这个代码片段的时间和空间复杂性吗?请参考leetcode问题-单词中断II。给定一个非空字符串s和一个包含非空单词列表的字典单词dict,在s中添加空格来构造一个句子,其中每个单词都是有效的字典单词。返回所有这些可能的句子。