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

BST节点移除的时间复杂度计算

钮高朗
2023-03-14

我很难找出平均和最坏情况下的时间复杂度。因此,我使用以下逻辑删除了BST节点

删除二元搜索树中的节点时,有3种情况

1> The node to delete has no children. That's easy: just release its resources and you're done. Time complexity O(1)

2> The node has a single child node. Release the node and replace it with its child, so the child holds the removed node's place in the tree. Time complexity O(1)

3> The node has two children. Find the right-most child of node's left subtree. Assign its value  to root, and delete this child. **Here time compexity can be maximum O(N)**

To find the node to be deleted can be **maximum O(N)**

那么,如何计算总体平均时间复杂度和最差时间复杂度??

共有2个答案

寿丰
2023-03-14

平均复杂度为O(log(n)在删除的情况下为对于查找节点将需要O(log(n)和再次删除O(log(n))因此平均为O(log(n))O(log(n))=O(log(n))最坏的情况显然是O(n)有关详细信息-http://en.wikipedia.org/wiki/Binary_search_tree#Deletion

唐博文
2023-03-14

在这种情况下,我相信最坏情况的复杂性足以描述这种情况。

为了找出最坏情况的复杂性,只需从您提到的三种可能的情况(O(n)情况)中找出最坏情况。因此,最坏情况的复杂性为O(n)。

在一些罕见的情况下(例如Quick排序),人们选择描述平均情况复杂性和最坏情况复杂性。在Quick排序的情况下,这是因为几乎所有情况下快速排序都是O(n*log(n)),只有在一些非常罕见的情况下才减少到O(n^2)。因此,人们既描述了平均情况,也描述了最坏情况复杂性。

然而,在从二元搜索树中删除节点的情况下,删除叶节点(无子节点和最佳情况)的频率不会比删除一个有两个子节点的节点的频率高很多,也不会比删除一个有两个子节点的节点的频率低很多(除非您针对特殊情况进行开发)。

因此,从二叉搜索树中删除节点的复杂性为O(n)。

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

  • 假设我有一个二元搜索树,其中我应该按照标准输入中给定的顺序插入N个唯一编号的键,然后我要删除所有键间隔为I=[最小,最大]的节点,以及与这些节点相邻的所有连接。这给了我很多较小的树,我要以一种特殊的方式将它们合并在一起。更精确地描述问题: 给定包含不同键的BST和间隔I,间隔删除分两个阶段进行。在第一阶段,它将删除关键帧位于I中的所有节点以及与已删除节点相邻的所有边。让生成的图包含k个连通分量T1

  • 我在考虑如何正确计算这个函数的时间复杂度: 我假设它是 O(n),其中 n 是列表的长度。我们的 while 循环是 O(n),for 循环也是 O(n), 这意味着我们得到了 2*O(n),等于 O(n)。 我说的对吗?

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

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

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