在 BST 中寻找 k 个后继者的时间复杂度

2024-02-01

给定高度的二叉搜索树(BST)h,需要O(k+h)时间来应用BST InOrder Successor 算法 https://stackoverflow.com/a/5471990/5459839 k连续多次,从任何节点开始,将每个下一个调用应用到上一个调用返回的节点上。

伪代码:

get_kth_successor(node):
    for times = 1 to k:
        node = successor(node)
    return node

如何证明这个时间复杂度呢?

特别是,我试图在之间建立一种关系k以及访问的节点数,但在这里找不到任何模式。


请了解以下有关后继遍历的事实:

  1. 您可以遍历分支不超过两次:向下和向上。

  2. 分支的每次两次访问都对应于找到至少一个后继者:当您通过分支向上回溯时,您将比第一次通过同一分支时向下访问至少一个后继者。

  3. 您将遍历的分支数量只有一次不能超过2h。当您从树的左下角的叶子开始并且必须一直向上到根(后继),然后再次向下到底部叶子以找到根的后继时,就会发生这种最坏的情况。但是,如果此后您需要更多后继者,则必须再次访问其中一些分支(回溯),然后才能第一次遍历其他分支。所以你遍历的分支总数只有一次不能增加超过2h.

所以,要找到k你最多会穿越的继任者k分支两次(向下和向上,参见第 2 点)并且2h分支一次(第 3 点),最坏情况下的分支遍历计数为2k+2h这是O(h+k).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 BST 中寻找 k 个后继者的时间复杂度 的相关文章

  • Numpy:具有特定条件的线性系统。无负解

    我正在使用 numpy 编写 Python 代码 在我的代码中 我使用 linalg solve 来求解 n 个变量中的 n 个方程的线性系统 当然 解决方案可以是积极的 也可以是消极的 我需要做的是始终有正解或至少等于 0 为此 我首先希
  • 基数首先排序最重要的还是最不重要的,哪个更快?

    我一直在研究基数排序实现 到目前为止粘贴在下面的代码 代码是用 Java 编写的 但在 C C 中应该也能正常工作 正如您从实现中看到的 我首先执行最高有效位 即整数的第 31 位 这似乎更快 因为一旦子组完成 就不再需要迭代 例如 打个比
  • 寻找下一个素数的最佳方法(Java)

    我被要求编写一个程序以最佳方式找到下一个素数 我编写了这段代码 但找不到最佳答案 有什么建议么 public static int nextPrime int input input now find if the number is pr
  • 直观地执行不同的排序算法[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 计算具有 3 个循环的算法的复杂度

    我尝试解决以下练习 以下代码片段最坏情况运行时间的增长顺序是什么 作为 N 的函数 int sum 0 for int i 1 i lt N i for int j 1 j lt i i j for int k 1 k lt j j k s
  • 填充体积算法

    我有一个具有一定尺寸长度 宽度 高度的盒子 我有不同长度 宽度 高度的物品 是否有现有的算法可以确定放入盒子中的最佳物品 这称为装箱 切割库存 背包问题 并且是 NP 难问题 一般来说 您只能通过使用启发式方法获得近似解 请参见示例 htt
  • 在 3d 网格中转发(绘制)线

    我需要类似 Bresenham 算法的东西 但是 对于 3d 网格空间来说不完全是这样 我需要 3d 单元网格 边缘尺寸 1 0 从 S 点开始 前进到 K 点 接触 该线接触的所有单元格 即使只有边缘 点被触摸我需要触摸所有 8 个单元
  • 一种良好且简单的随机性测量方法

    获取一长整数序列 例如 100 000 个 并返回序列随机性的测量值的最佳算法是什么 该函数应返回单个结果 如果序列并非完全随机 则返回 0 如果完全随机 则返回 1 如果序列有点随机 它可以给出介于两者之间的东西 例如0 95 可能是一个
  • 如何在 JavaScript 中构建树模式匹配算法?

    好吧 这是一个有点复杂的问题 但是 tl dr 基本上是如何使用 模式树 解析 实际树 如何检查特定的树实例是否与特定的模式树匹配 首先 我们有我们的结构模式树 模式树通常可以包含以下类型的节点 sequence节点 匹配一系列项目 零个或
  • 从原点开始在离散 2D 网格上迭代向外螺旋的算法

    例如 这是预期螺旋的形状 以及迭代的每个步骤 y 16 15 14 13 12 17 4 3 2 11 18 5 0 1 10 x 19 6 7 8 9 20 21 22 23 24 其中线条是 x 轴和 y 轴 以下是算法每次迭代 返回
  • 数独算法,暴力破解[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我正在尝试
  • 如何将多边形放入另一个多边形内[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有两个多边形 如下图所示 左边是 粗多边形 右边是 最终多边形 现在 我正在寻找算法来将 最终多边形 拟合到 粗糙多边形 内 并具有
  • “包含字符串”的快速索引

    在我的应用程序中 我有多达数百万个短字符串 大部分短于 32 个字符 我想实现一个带有附加列表的搜索框 该列表仅包含包含在搜索框中输入的整个字符串的元素 如何预先建立索引来快速找到此类字符串 所有排序的 STL 容器都会检查整个字符串 对于
  • 是否有一种算法可以在线性时间内计算数组反转?

    我知道有多少倒转 en wikipedia org wiki Inversion 28discrete mathematics 29 in an n 元素数组可以在 O n log n 操作使用增强型归并排序 http www geeksf
  • Python 旅行商贪婪算法 [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 因此 我为旅行推销员问题创建了一种排序 并按 x 坐标和 y 坐标进行排序 我正在尝试实施贪婪搜索 但无法做到 此外 每
  • 坐标算法 - 绕中心旋转

    通过查看这张图片 我想您会很好地理解我的问题 图片已删除 网址不再有效 现在返回广告 所以基本上我想要一个函数 它接受一个对象作为参数 并根据我之前添加的对象数量为该对象提供正确的坐标 假设我将所有这些对象添加到一个数组中 objectAr
  • 如何光栅化旋转矩形(通过 setpixel 在 2d 中)

    我有四个 2d 顶点 A B C D 的旋转矩形 我需要在像素缓冲区中 有效地 光栅化 绘制它 使用 setpixel x y 颜色 怎么做 我正在尝试使用一些代码 例如 convertilg a b c d do up down left
  • 总和不小于 key 的数组的最小子集

    给定一个数组 假设为非负整数 我们需要找到最小长度子集 使得元素之和不小于 K K 是作为输入提供的另一个整数 是否有可能找到时间复杂度为 O n n 的大 oh 的解决方案 我目前的想法是这样的 我们可以在 O n log n 中对数组进
  • 贝尔曼福特算法可以有任意的边顺序吗?

    我刚刚开始学习新算法 但当我阅读 极客为极客而写的贝尔曼福特算法 时 我陷入了困境 http www geeksforgeeks org dynamic programming set 23 bellman ford algorithm h
  • 测试 python Counter 是否包含在另一个 Counter 中

    如何测试是否是pythonCounter https docs python org 2 library collections html collections Counter is 包含在另一个中使用以下定义 柜台a包含在计数器中b当且

随机推荐

  • 托管私人 Sphinx 文档 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我目前正在使用 Sphinx 为一个相当复杂的 Django 网站编写一些广泛的文档 我一直在内部从事
  • 在 Angular js 中使用 ng-class 中的函数

    我在用ng class用于添加 CSS 类 尽管有很多关于此的文章 但我无法添加函数调用ng class 我有以下表达 ng class highlighter row Class file id 1 file processed bold
  • 如何在 Visual Studio Code 中为我的 Electron 应用程序使用 ${workspaceRoot}?

    我有一个 Electron 应用程序 我可以在 Visual Studio Code 中调试它 我升级到版本 0 10 8 后 它将不再运行 我在 launch json 文件中收到以下错误消息 相对路径将不再自动转换为绝对路径 考虑使用
  • 通过 XSD 限制基于另一个元素的 XML 元素

    我相信这与keyref但我不确定 我真的不确定它是否可以做到 例如 假设我有 myElement1 和 myElement2 如果 XML 文件中没有 myElement2 则 myElement1 必须存在 否则是可选的 有没有办法在我的
  • 使所选项目适合一行,而不是两行

    我有一个非常简单的选择 当我单击菜单时 它会显示 3 个选项 每个选项都在一行上 但是 当我选择一个项目时 它会显示为 2 行 第一行用于文本 另一行用于图标 我该如何使它成为一根线 import styles css import Edi
  • 使用 SqlCommand.Parameters.AddWithValue 时是否应该包含 @?

    在使用 AddWithValue 时 我总是在参数名称中包含 at 符号 但我只是注意到其他人编写的一些代码没有使用它 一种方法比另一种方法更正确吗 cmd Parameters AddWithValue ixCustomer ixCust
  • 在 Snow Leopard 上运行 iPhone 5 模拟器

    我正在我的 mac 上运行 iOS6 SDK 在 Snow Leopard 上运行 Xcode 4 2 使用以下步骤堆栈溢出帖子 https stackoverflow com questions 9613565 is it possibl
  • LINQ 到 XYZ 多态性?

    我遇到过这样的情况 客户要求我们实现数据访问代码 以根据运行时配置设置使用 Oracle 或 SQL Server 数据库 生产环境使用 Oracle 但开发和 QA 都针对 SQL Server 实例运行 我对此没有任何控制权 也没有任何
  • 如何使用Java 8流遍历多个列表?

    我有三份清单 List
  • 如何开始学习android框架[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在 QtCreator 中分​​析 PySide2 + QML?

    我有一个 PySide2 应用程序 它使用 QML 来显示用户界面 该应用程序通过命令行运行 我还可以启动它并在 QtCreator 中调试它 但是 当我尝试运行 QmlProfiler 时 我看到以下错误 1 error home use
  • 从使用中的相机拍照

    如何从正在使用的前置摄像头拍照而不在屏幕上显示摄像头 我有服务舱 public class PhotoTakingService extends Service Camera variables a surface holder priva
  • 如何修改 TDataSetProvider.OnUpdateData 中的字段值

    阅读有关 TDataSetProvider OnUpdateData 的 Delphi 帮助文件后 事件说明 检查数据 例如 不允许的值或数据更改 并引发异常 在更新发生之前取消应用 在将数据发送到源数据集或数据库服务器之前更改数据 例如加
  • 更改 Material UI 中的 TextField 字体颜色?

    我目前正在使用材质用户界面 https mui com 我在尝试更改多行的字体颜色时遇到问题TextField
  • 如何在 iOS 设备上运行 .app [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有应用程序的 app 文件 我有 mac 和 iPhone 但没有安装 Xcode 如何在没有 Xcode 的情况下在 iPhone 上
  • 无法安装 SQL Server (setup.exe)

    我在笔记本电脑上使用了 SQL Server 2019 Express 版本 但我卸载了 现在我尝试安装 SQL Server 2019 Developer Edition 但出现错误 退出代码 十进制 2068119551 退出消息 找不
  • 使用 PostGIS 围绕线串创建多边形

    我是 PostGIS 新手 需要在这里寻求一些帮助 我有一条来自谷歌地图的折线 代表行程 需要在其周围构建一个具有特定距离 以米或公里为单位 的多边形 缓冲区 对于输入 我有纬度 经度点列表和所需的缓冲距离 任何人都可以帮助我构建查询 以便
  • 在我的网站中使用 PHPBB2 登录凭据

    我目前正在使用 PHPBB2 论坛作为我网站之一的一部分 并且我想扩展该网站 添加新页面 脚本等 我想将对这些页面的访问限制为已登录 PHPBB2 论坛的用户 事实上 如果只有某个 MemberGroup 的成员可以访问这些页面 那就太好了
  • 是否可以检测弹窗中的用户点击事件?

    如果当前 url 和弹出 url 位于同一域中 我可以使用以下代码检测弹出窗口中的用户单击事件 var myWindow window open abc html MsgWindow width 500 height 600 myWindo
  • 在 BST 中寻找 k 个后继者的时间复杂度

    给定高度的二叉搜索树 BST h 需要O k h 时间来应用BST InOrder Successor 算法 https stackoverflow com a 5471990 5459839 k连续多次 从任何节点开始 将每个下一个调用应