为什么二叉搜索树中的查找时间复杂度为 O(log(n))?

2024-01-06

我可以看到,当在 a 中查找值时,如何BST每次将节点与我们要查找的值进行比较时,我们都会留下一半的树。

但是我不明白为什么时间复杂度是O(log(n))。所以,我的问题是:

如果我们有一个包含 N 个元素的树,为什么查找树并检查特定值是否存在的时间复杂度是 O(log(n)),我们如何得到它?


你的问题似乎得到了很好的回答here https://stackoverflow.com/questions/2307283/what-does-olog-n-mean-exactly但就您的具体问题进行总结时,最好反向思考; “随着节点数量的增加,BST 求解时间会发生什么变化”?

本质上,在 BST 中,每次将节点数量增加一倍,您只会将求解步骤数增加一倍。为了扩展这一点,四倍的节点提供了两个额外的步骤。八倍的节点提供了三个额外的步骤。十六个节点提供了四个额外的步骤。等等。

这些对中第一个数字的以 2 为底的对数是这些对中的第二个数字。它是以 2 为底的对数,因为这是二分搜索(每一步将问题空间减半)。

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

为什么二叉搜索树中的查找时间复杂度为 O(log(n))? 的相关文章

  • 理解 C:指针和结构

    我试图更好地理解 c 但很难理解在哪里使用 和 字符 一般而言只是结构 这是一些代码 void word not lc3 word t R lc3 word t A int ptr ptr R ptr 0 1 printf this is
  • 面临减法时的算法复杂性

    我必须简化以下公式才能获得算法的时间复杂度 n 2 n 3 是否有任何适用的规则可以让我进一步简化这个表达式为更 常见 的 n 2 或类似的东西 我假设这就是结果 可能是错误的 我根本不知道如何处理这里的减法 通常 如果两个值相加 您只考虑
  • 如何有效地合并两个 BST?

    如何合并两个二叉搜索树并保持BST的性质 如果我们决定从树中取出每个元素并将其插入到另一个元素中 则此方法的复杂度将为O n1 log n2 where n1是树的节点数 比如T1 我们已经拆分了 并且n2是另一棵树的节点数 比如T2 执行
  • 何时使用 Box> 或 Vec>?

    什么时候设计一个嵌套的数据结构才有意义 Box and a Vec 或相反亦然 似乎在大多数情况下 您想在堆上存储多个固定大小的东西 Box是多余的 因为它唯一的 作用是堆分配一个 单个值 以及一个正常的Vec已经在堆上分配其存储空间 背景
  • 如何在javascript中实现deque数据结构?

    我正在用 javascript 学习数据结构 我现在的重点是如何实现双端队列 编辑 从下面的评论中我得到了有关如何实施的有用指示deque based array 有没有一个具体实施的方向deque based object使用类 我明白了
  • 算法的最佳、最差和平均情况运行时间是多少?

    算法的最佳 最差和平均情况运行时间是多少 用最简单的术语来说 对于输入大小为n 最好的情况 最快完成时间 选择最佳输入 例如 排序算法的最佳情况是已经排序的数据 最坏的情况下 完成最慢的时间 选择了消极的输入 例如 排序算法的最坏情况可能是
  • 如何在 O(n) 时间内遍历二叉树而不需要额外的内存

    给定一棵带有整数 左指针和右指针的二叉树 如何在 O n 时间和 O 1 额外内存 无堆栈 队列 递归 内遍历该树 This guy http nandacumar blogspot com 2006 06 traversing tree
  • ConcurrentLinkedDeque 与 LinkedBlockingDeque

    我需要一个线程安全的 LIFO 结构 并发现我可以使用线程安全的实现Deque为了这 Java 7 引入了ConcurrentLinkedDeque http docs oracle com javase 7 docs api java u
  • O(mn) 比 O((m+n)^2) 更好吗?

    算法的输入是m and n 我的算法的时间复杂度是O mn 我有一个时间复杂度为的基准算法O m n 我的实现在时间复杂度方面是否优于基准 许多评论者和回答者希望只考虑以下情况 m n或者至少当它们通过一个常数因子相关时 这不是它的工作原理
  • 如何在 dijkstra 算法中以 O(log n ) 时间更新优先级队列中的键?

    过去一周我一直在研究 dijkstra 算法 我在 java 中有正确的运行代码 它使用数组来计算标准 findMin 函数 该函数为您提供距离最小的顶点 显然它是 O n 现在我希望使用优先级队列 最小堆 来实现它 我的思考过程是 whi
  • 将非平凡函数应用于 data.table 的有序子集

    Problem 我正在尝试使用我新发现的 data table 功能 永久 来计算一堆数据的频率内容 如下所示 Sample Channel Trial Voltage Class Subject 1 1 1 196 82253 1 1 1
  • 除法的时间复杂度是多少?

    我使用除法算法 根据https en wikipedia org wiki Computational complexity of mathematical operations https en wikipedia org wiki Co
  • 如何从数组表示构建不完全二叉树

    如果输入是一个数组 其中null表示没有节点 input 1 2 3 null 5 null 7 请假设我已经检查过输入 对于每个array i 它的父母array i 2 不会是null 递归地 所以根不能是null 如何构建具有这样的逻
  • 带 If 的嵌套 For 循环的时间复杂度

    void f int n for int i 1 i lt n i if i int sqrt n 0 for int k 0 k lt pow i 3 k do something 我的思考过程 执行if语句的次数 sum i 1 to
  • 树的递归和非递归过程

    我们知道树是递归数据结构 我们在编写树的过程中使用递归 例如BST的删除方法等 递归的好处是 我们的程序变得非常小 例如中序遍历的代码只有4或5行 而不是非递归程序 虽然会很长 但从理解的角度来看 不像递归程序那么复杂 这就是为什么我讨厌递
  • TreeMap 删除所有大于某个键的键

    在项目中 我需要删除键值大于某个键的所有对象 键类型为Date 如果重要的话 据我所知TreeMapJava中实现的是红黑树 它是一种二叉搜索树 所以我应该得到O n 删除子树时 但除了制作尾部视图并一一删除之外 我找不到任何方法可以做到这
  • hashmap包含键的复杂度

    我写了一个方法来查找列表中的重复项 它工作正常 但我担心使用 containsKey 的复杂性 当我们使用 containsKey 时 我们必须为每个键计算一个哈希函数 然后将每个键与我们的搜索项进行比较 对吗 那么复杂度不是 O n 吗
  • 解释这段代码的工作原理;子进程如何返回值以及在哪里返回值?

    我不明白子进程如何返回该值以及返回给谁 输出为 6 7 问题来源 http www cs utexas edu mwalfish classes s11 cs372h hw sol1 html http www cs utexas edu
  • 大数据使用什么数据结构

    我有一个包含一百万行的 Excel 工作表 每行有 100 列 每行代表一个具有 100 个属性的类的实例 列值是这些属性的值 哪种数据结构最适合在这里使用来存储数百万个数据实例 Thanks 这实际上取决于您需要如何访问这些数据以及您想要
  • std::map 和二叉搜索树

    我读过 std map 是使用二叉搜索树数据结构实现的 BST 是一种顺序数据结构 类似于数组中的元素 它将元素存储在 BST 节点中并按其顺序维护元素 例如如果元素小于节点 则将其存储在节点的左侧 如果元素大于节点 则将其存储在节点的右侧

随机推荐

  • 为什么我的简单 pygame 会滞后? [复制]

    这个问题在这里已经有答案了 我一直在使用 pygame 制作一个简单的 python 游戏 在添加切换枪支的功能后 游戏开始滞后 我不知道为什么它滞后 我尝试过重新启动 但没有成功 该代码非常短 所以可能只是我的电脑 但如果有任何可以帮助运
  • UI 滚动时应用程序停止从套接字接收数据

    我有一个使用 UDP 套接字接收数据的 iPad 应用程序 并且它有一个UIWebView来浏览网页 但是在 UIWebView 中进行滚动时 一切都会冻结并且没有收到任何数据 我一直在搜索 它与运行循环和线程有关 但是 如果 UIWebV
  • C# 多线程控制台应用程序 - 控制台在线程完成之前退出

    我有一个 C 控制台应用程序 最多可创建 5 个线程 线程执行良好 但 UI 线程在完成工作后关闭 有没有办法让主 UI 线程在副线程运行时保持运行 foreach var url in urls Console WriteLine sta
  • Google Apps 自定义域 SSL 已配置但连接失败

    我已按照以下步骤操作https cloud google com appengine docs ssl https cloud google com appengine docs ssl and https support google c
  • 不同浏览器窗口中的 JSF 会话问题

    我们有一个基于 JSF 2 0 MyFaces 构建并在 Weblogic 应用服务器上运行的应用程序 我们面临一个有关 http 会话的问题 Issue 假设我在两个不同的 IE 窗口中打开应用程序 并在第一个窗口中提供一些搜索输入 在第
  • R:考虑因素按周计算移动最大坡度

    我有一个数据框 其中包括下面的供暖度日 HDD structure list WinterID structure c 1L 1L 1L 1L 1L 1L 1L 1L 1L 1L 1L 1L 1L 1L 1L 1L 1L 1L 1L 1L
  • mysql 分区

    只是想验证数据库分区仅在数据库级别实现 当我们查询分区表时 我们仍然执行正常查询 我们的查询没有什么特别的 解析查询时会自动执行优化 对吗 例如我们有一个名为 地址 的表 其中有一列名为 国家 地区代码 和 城市 所以如果我想获得美国纽约的
  • 如何创建 RSS 提要并显示它?

    在我为广播电台维护的网站上 他们有一个显示新闻文章的页面 现在新闻发布在一个 html 页面中 然后由包含所有导航的 php 页面读取 我被要求将其制作成 RSS 源 我该怎么做呢 我知道如何制作 XML 文件 但编辑新闻文件的人缺乏技术
  • 避免在 Android 上尝试/捕获

    我是 Android 环境的新手 我已经开始编写一些代码来对数据库执行一些查询 当我必须处理异常时 我不知道正确的方法是什么 我曾经使用过 Androidthrows方法声明 但似乎throws安卓不允许吗 只是try catch 我这样说
  • 使用 VBA 以编程方式安装 Microsoft Access 加载项

    查找有关 Microsoft Access 加载项开发的信息就像拔掉所有牙齿一样 是的 我发现了几篇托管加载项文章 但几乎找不到非托管加载项的内容 我确实找到了一篇很棒的文章 它在创建基本上是一个非托管的 mda 项目方面非常古老 我已经遵
  • PIP 在 Windows 8 上的哪里存储/保存 Python 3 模块/包?

    我到处都找过了 但找不到软件包的安装位置 此外 包裹是来自pip questions tagged pip 模块 库或只是包python questions tagged python术语 使用此命令列出全局包及其位置 pip list v
  • Gradle 获得“sudo”权限

    我有下一个问题 我需要使用 Gradle 在服务器上执行一些部署内容 但为此 Gradle 应该在目标部署服务器上具有 root 访问权限 我有 sudo 的密码 但我不知道如何将其插入服务器 有没有办法从 Gradle 任务中获得 sud
  • 注释属性必须是类文字吗?为什么?常量也应该没问题

    有人可以解释为什么字符串和类注释参数的预期不同吗 为什么编译器需要类的文字 同时也接受字符串的常量 使用 Spring 的 RequestMapping 的工作示例 public class MyController public stat
  • UIView 动画后 UIView 内的 UIButton 不起作用

    我在这个论坛上看到了很多问题 这些问题给出了这个主题 UIButton inside a UIView when animated does not work 的答案 但是在尝试了类似的答案之后 a UIViewAnimationOptio
  • R 中的函数工厂

    我尝试通过返回专门函数的字典来提出一个函数工厂 或多或少类似于函数式编程风格 我尝试在下面的代码中执行此操作 require hash names c aa bb cc funs hash for i in seq length names
  • PHP 中 ::(双冒号)和 ->(箭头)有什么区别?

    PHP 中有两种不同的方法来访问方法 但是有什么区别呢 response gt setParameter foo bar and sfConfig set foo bar 我假设 gt 带有大于号或 V 形的破折号 用于变量函数 并且 双冒
  • 将 this 传递给函数的基本查询

    我正在尝试更好地理解 JavaScript function foo console log this normal function call foo this will refer to window 当我尝试将其传递给函数时 它会抛出
  • 如何判断这个内存泄漏是从哪里来的呢?

    如何确定代码中的内存泄漏来自何处 除了我的应用程序中的 main 函数之外 它没有引用任何内容 看来您正在尝试同时使用 NSZombieEnabled 和泄漏 这两种诊断技术不能一起工作 NSZombieEnabled 使所有已释放的对象都
  • 我应该如何在 Perl 中序列化代码引用?

    我希望nstore一个 Perl 哈希值 其中还包含代码引用 按照此perldoc http perldoc perl org Storable html CODE REFERENCEShttp perldoc perl org Stora
  • 为什么二叉搜索树中的查找时间复杂度为 O(log(n))?

    我可以看到 当在 a 中查找值时 如何BST每次将节点与我们要查找的值进行比较时 我们都会留下一半的树 但是我不明白为什么时间复杂度是O log n 所以 我的问题是 如果我们有一个包含 N 个元素的树 为什么查找树并检查特定值是否存在的时