在线性时间内从排序数组构建红黑树

2023-11-26

我知道如何通过 n 次插入来构建它(每次插入的效率为 O(log(n))) (n*log(n)) 总体 ,我还知道 2-3-4 树的等效结构也可以用线性时间从排序数组构建。 谁能提供有关红黑版本的简单解释吗?


无论您要构建哪种 BST。算法将是相同的。只需要构建平衡二叉树。

  1. 将中间元素放置到当前位置
  2. 地点[开始; middle) 元素到左子树。
  3. 将(中间;末端)元素放置到右子树。

这是 O(N) 算法。可以证明,结果树将是平衡的。

我们有平衡树,所以根据定义:

长度(最长路径) - 长度(最短路径)

因此,您需要将所有节点标记为黑色,除了树中最深的节点(将它们标记为红色)。

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

在线性时间内从排序数组构建红黑树 的相关文章

  • 为什么 .Net 词典中的条目是按加法顺序排列的?

    我刚刚看到这种行为 我对此感到有点惊讶 如果我向字典中添加 3 或 4 个元素 然后执行 For Each 来获取所有键 它们将以我添加的顺序出现 这让我感到惊讶的原因是字典内部应该是一个哈希表 所以我希望事情能以任何顺序出现 按键的哈希排
  • 根据多个值过滤字典列表

    我有一个字典列表 我想根据多个条件进行过滤 该列表的简化版本如下所示 orders name v price 123 location Mars name x price 223 location Mars name x price 124
  • 如何使用 d3.v4 中的 JSON 数据创建树布局 - 不使用 stratify()

    我正在尝试将一些 d3 代码从 v3 更新到版本 4 我有一个使用 JSON 数据的树形图 d3 v4 示例展示了如何使用 stratify 将表格数据 例如flare csv 转换为分层数据https bl ocks org mbosto
  • 我想优化这个短循环

    我想优化这个简单的循环 unsigned int i while j 0 j is an unsigned int with a start value of about N 36 000 000 float sub 0 i 1 unsig
  • 用于插入/删除/排名/选择查询的最佳数据结构/算法

    到目前为止 我知道像AVL树和红黑树这样的自平衡BST可以在O log n 次内完成这些操作 然而 要使用这些结构 我们必须自己实现AVL树或RB树 我听说有一个算法 实现这四个操作而不使用自平衡 BST 有了我们自己定义的结构 我们就需要
  • 将非平凡函数应用于 data.table 的有序子集

    Problem 我正在尝试使用我新发现的 data table 功能 永久 来计算一堆数据的频率内容 如下所示 Sample Channel Trial Voltage Class Subject 1 1 1 196 82253 1 1 1
  • 任何人都知道 JQuery 插件可以生成类似于 geni.com 上的树形菜单

    大家好 我花了几个小时寻找一个 Jquery 插件来生成像 geni com 上那样的树形菜单模块 如果有人知道 Jquery 中的这样的插件或脚本 请让我知道或指导我如何使用 Jquery 开发这样的功能 请检查我正在寻找什么http w
  • 从 XML 构建树结构的速度很慢

    我正在将 XML 文档解析为我自己的结构 但对于大型输入来说构建它非常慢 是否有更好的方法来做到这一点 public static DomTree
  • 初始化 HashMap 的最佳方法

    我通常会这样做 HashMap
  • 搜索/排序算法 - 是否有类似 GoF 的列表?

    我是一名自学成才的开发人员 坦率地说 我不太擅长找出在任何特定情况下使用哪种搜索或排序算法 我只是想知道是否有设计模式 esque 列出了以太坊中可用的常见算法 供我添加书签 就像是 算法名称 带有别名 如果有的话 它解决的问题 大O成本
  • 在关键服务器上对字符串进行内存受限的外部排序,并合并和计算重复项(数十亿个文件名)

    我们的服务器生成如下文件 c521c143 2a23 42ef 89d1 557915e2323a sign xml在其日志文件夹中 第一部分是GUID 第二部分是名称模板 我想计算具有同名模板的文件的数量 例如 我们有 c521c143
  • cordova 使用什么 js“引擎”?

    Cordova 使用什么 JS 引擎 它是特定于平台的还是跨所有平台的一个标准 意味着 iOS 的 safari 和 Android 的 chrome 以及 Windows 可能的 IE 标准 或者跨所有平台的 Cordova JS 引擎
  • 在 Java 中实现排列算法的技巧

    作为学校项目的一部分 我需要编写一个函数 该函数将接受整数 N 并返回数组 0 1 N 1 的每个排列的二维数组 该声明看起来像 public static int permutations int N 该算法描述于http www usn
  • 用惯用的 Scala 更新大型数据结构

    我已经尝试 Scala 一段时间了 并且经常遇到支持不可变数据结构的建议 但是当你有一个像这样的数据结构时3D 场景图 大型神经网络或任何具有大量需要频繁更新的对象的东西 对场景中的对象进行动画处理 训练神经网络 这似乎是 运行时效率极低
  • 缩短文本并仅保留重要句子

    德国网站 nandoo net 提供了缩短新闻文章的可能性 如果使用滑块更改百分比值 文本会发生变化并且某些句子会被遗漏 您可以在这里看到它的实际效果 http www nandoo net read article 299925 http
  • 字符串排序真的是 O(n^2logn) 吗? [复制]

    这个问题在这里已经有答案了 我读了以下内容 排序需要 O NlogN 那么它怎么是 O N 2logN 我们在这里想念的是 两个字符串的比较不是 O 1 在最坏的情况下 需要 在 所以最终的复杂度是O N 2logN 它是否正确 我一直认为
  • 使用C标准数学库精确计算标准正态分布的CDF

    标准 C 数学库不提供计算标准正态分布 CDF 的函数 normcdf 然而 它确实提供了密切相关的函数 误差函数 erf 和互补误差函数 erfc 计算 CDF 的最快方法通常是通过误差函数 使用预定义常量 M SQRT1 2 来表示 d
  • 如何高效地在屏幕上精确绘制N个点?

    这听起来是一个简单的问题 但我发现要获得良好的性能是非常棘手的 我提出的第一个算法是随机绘制点 从一组中检查是否已绘制 否则绘制 如果我们只绘制几个点 那么这种方法效果很好 但当我们接近填满屏幕时 速度会灾难性地减慢 我想出的最好的方法是构
  • 快速求解子集和

    考虑这种解决子集和问题的方法 def subset summing to zero activities subsets 0 for activity cost in activities iteritems old subsets sub
  • 如何从一组重叠的圆计算多边形集?

    这个问题是一些计算细节的扩展这个问题 https stackoverflow com questions 1667310 combined area of overlapping circles 假设有一组 可能重叠的 圆 并且希望计算这组

随机推荐

  • 如何为每个请求执行通用代码?

    有没有可能找到类似的功能Page Load 我有 MVC 应用程序 我需要在每个页面加载或重新加载时运行一些代码 或者调用一些控制器 所有类都有一个共享函数 我尝试 Application Start 但这仅在应用程序第一次运行时执行 我搜
  • 线程阻止所有者的垃圾收集

    在我创建的库中 我有一个 DataPort 类 它实现与 NET SerialPort 类类似的功能 它与某些硬件进行通信 并且每当数据通过该硬件传入时就会引发一个事件 为了实现此行为 DataPort 启动一个线程 该线程预计具有与 Da
  • OpenCV 2.4.9 for Python,找不到棋盘(相机标定教程)

    我正在尝试根据以下内容使用 OpenCV 工具校准相机本指南 问题是这个函数findChessboardCorners在我尝试过的图像上找不到任何棋盘 我用了很多 甚至只是简单的棋盘图案 无论如何 什么也没有被发现 这是代码 几乎与上面的链
  • Windows下在adb中运行vi

    偶尔 我会想要编辑一个文件 比如我的 Android 设备上的 system build prop 或 etc hosts 我发现最简单的方法是 c gt adb shell su vi etc hosts 如果我使用 Linux 这工作得
  • 在模型类中使用 javafx.beans 属性

    在模型类中使用 JavaFX beans 属性是否正确 我想知道在模型类中使用属 性以便能够更轻松地将它们与视图组件绑定是否是一个好习惯 我并不担心这些库将来的可用性 因为我的程序将在 JRE8 或更高版本上运行 但在模型类中使用 Java
  • 将多个连续的连字符替换为一个

    这在 JavaScript 中可能吗 我从 Java 中得到了这个 但不能在 Javascript 中使用 s 2 g 还有其他有效的方法吗 是的 您可以在 Javascript 中使用相同的正则表达式replace method s re
  • 如何在 RockMongo 或 mViewer 上的 mongodb 客户端中运行聚合查询

    我刚刚开始使用 mongo db 我使用 rockmongo 客户端和我的 ubuntu 终端作为另一个客户端 我已经使用组聚合实现了查询 如下所示 db archiveImpl group key accountID true phone
  • 如何复制debug.keystore文件?

    我有同样的问题Android Google 地图在我的计算机之外无法运行 并且在解决方案中 看起来确保我团队中的每个人都拥有相同的 keystore 文件将解决问题 但是 keystore 文件是隐藏的 我想它也以某种方式加密 您不能仅使用
  • Tensorboard - 可视化 LSTM 的权重

    我使用多个 LSTM 层来形成深度循环神经网络 我想在训练期间监控每个 LSTM 层的权重 但是 我不知道如何将 LSTM 层权重的摘要附加到 TensorBoard 关于如何做到这一点有什么建议吗 代码如下 cells with tf n
  • Excel有地图或选择功能吗?

    我有一行字符串值 我想做一个vlookup对每个结果进行计算 然后计算结果的平均值 如果这是 C 我会做Select str gt VLookup str dict Average 有没有办法在单个 Excel 函数中做到这一点 我用的是2
  • 确定浏览器是否具有拖放功能?

    我正在实施jQuery 文件上传并试图找出检测客户端是否可以支持拖放的最佳方法 这样我就可以渲染诸如 将文件拖放到此处上传 之类的内容 只有当他们实际上可以做到这一点时 在插件代码中我可以看到一个函数isXHRUploadCapable这似
  • 从 requirejs 映射调用文本插件

    我正在使用 TypeScript Backbone 和 Mustache 编写一个 Web 应用程序 我想使用 Requirejs 进行依赖加载 我还使用 TypeScript 的 Web Essentials Visual Studio
  • 是否可以覆盖“呼叫”功能?

    是否可以在通用级别上重写 调用 函数 以便每次在应用程序中的任何位置调用方法时都会发生一些情况 我尝试覆盖 Object call 但尽管我设法做到了 但它并没有改变我的应用程序的工作方式 顺便说一句 即使它有效 我是否应该每次都显式调用
  • Perl 正则表达式中的单独反向引用后跟数字文字

    我发现这个相关问题 在 perl 中 替换文本中的反向引用后跟数字文字但看起来完全不同 我有一个像这样的正则表达式 s 0 9 xy 1 1 2 g whitespace here 但这个空白出现在替换中 如何在不让 perl 混淆反向引用
  • 图层中的子集参数不再适用于 ggplot2 >= 2.0.0

    我更新到最新版本了ggplot2并在层中打印子集时遇到问题 library ggplot2 library plyr df lt data frame x runif 100 y runif 100 ggplot df aes x y ge
  • Android - 如何检查互联网访问,而不仅仅是 wifi 连接? [复制]

    这个问题在这里已经有答案了 我尝试使用下面的代码来检查我的手机是否已连接到无线网络 当我想知道我的手机是否已连接到网络时 它运行良好 但它无法提供有关互联网访问的信息 类似于 Ping 任何网站 实际上我遵循了很多链接但仍然没有答案 所以如
  • 强制 phpmailer 发送正文为空的邮件

    我需要使用 phpMailer 将 pdf 文件作为附件发送到传真网关 如果此电子邮件有正文 则传真将有第二页包含此文本 通过说 mail gt Body php 邮件返回Message body empty 如何强制 phpMailer
  • 在 eclipse 中调试 GRAILS 3

    我想知道是否有任何方法可以通过从 eclipse mars IDE 中单击来调试 Grails 3 应用程序 就像 Java 或 Java Spring Boot Web 应用程序一样 可以执行以下操作 在服务器上调试 可以 运行为 gra
  • 是否可以逐行调试 bash 脚本?

    我会喜欢 Microsoft Visual Studio 中的逐行调试之类的功能bash 当前变量值等等 有什么工具或方法可以做到吗 set x and set v不错 但并不完美 See bashdb 如果您的系统上安装了它 请参阅man
  • 在线性时间内从排序数组构建红黑树

    我知道如何通过 n 次插入来构建它 每次插入的效率为 O log n n log n 总体 我还知道 2 3 4 树的等效结构也可以用线性时间从排序数组构建 谁能提供有关红黑版本的简单解释吗 无论您要构建哪种 BST 算法将是相同的 只需要