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

k在bst中连续调用树继任者

穆铭晨
2023-03-14

证明对树后继者的K次连续调用需要O(kh)时间。由于每个节点的访问量是atmost的两倍,因此访问的节点数的最大界限必须为2k。时间复杂度必须为O(k)。我不明白O(h)的因素在哪里。是因为访问了节点,但不是后续节点。我不能确切地解释自己,因子O(h)是如何参与整个过程的

PS:我知道这个问题已经存在,但我无法理解解决方案

共有1个答案

丁书
2023-03-14

此外,在O(k h)符号中,还有一种书写O(MAX(k,h))的替代形式。

找到一次继任者可能需要O(h)时间。要了解为什么这是正确的,请考虑在您寻找根的左侧子树最右边节点的继任者时的情况:它的继任者位于右侧子树的底部,因此您必须遍历树的高度两次。这就是为什么您需要在计算中包含h:如果kh相比很小,那么h将主导算法的时间。

练习的重点是证明连续调用继任者k次的时间不是O(k*h),正如人们在观察到单个调用最多可能需要O(h)后可以想象的那样。您通过显示遍历树高度的成本分布在k调用中来证明这一点,就像您注意到每个节点最多被访问两次一样。

 类似资料:
  • 我正在尝试使用C#'s async/await/continuewith。我的目标是必须有两个并行运行的任务,尽管哪个任务是按顺序执行一系列操作。为了做到这一点,我计划有一个清单 为了总结,这里有一个示例来说明我期望发生的事情: 预期输出为 但是,输出是 有没有一种方法可以让调用的任务等待提供的函数完成后才被视为完成?即。.等待将等待两个任务都完成,一个是原始任务,另一个是ContinueAnd返

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

  • 我正在从一个Spring Boot应用程序(在Java11中)同步调用一个REST API来下载一个文件。 这就是REST API的样子: 首先调用“/download”->API返回“文件生成正在进行”状态 所以,5秒后再调用它->API再次返回“文件生成正在进行”状态 因此,在5秒后再次调用它->API再次返回“文件生成正在进行”状态(但此时假定文件已生成) 因此,5秒后再调用一次->API返

  • 我的问题如下: 我有一个带关键字的二元搜索树:

  • 如何在Gradle中清晰地分离可能需要两个不同配置任务的任务?我试图将要在buildsrc/dbhelpertasks.gradle文件中执行的实际任务与父build.gradle文件分开。build.gradle将包含在dbhelpertasks.gradle中使用的部分配置的任务。 我有许多不同的数据库要连接并在其上执行SQL,因此创建了一个采用数据库名称和URL的SQLServerTask。

  • 不需要模拟随机,所以我可以用我的随机器模拟在一行上完成所有的事情?