线段树、区间树、二叉索引树和范围树有什么区别?

2024-01-10

线段树、区间树、二叉索引树和范围树之间有什么区别:

  • 关键思想/定义
  • 应用领域
  • 更高维度的性能/秩序/空间消耗

请不要仅仅给出定义。


所有这些数据结构都用于解决不同的问题:

  • 线段树存储间隔,并针对“这些区间中的哪一个包含给定点”查询。
  • 区间树也存储间隔,但针对“这些间隔中哪些与给定间隔重叠" 查询。它也可以用于点查询——类似于线段树。
  • 范围树存储积分,并针对“哪些点落在给定区间内”查询。
  • 二叉索引树存储每个索引的项目计数,并针对“索引 m 和 n 之间有多少项”查询。

一维的性能/空间消耗:

  • 线段树- O(n logn) 预处理时间,O(k+logn) 查询时间,O(n logn) 空间
  • 区间树- O(n logn) 预处理时间,O(k+logn) 查询时间,O(n) 空间
  • 范围树- O(n logn) 预处理时间,O(k+logn) 查询时间,O(n) 空间
  • 二叉索引树- O(n logn) 预处理时间、O(logn) 查询时间、O(n) 空间

(k 是报告结果的数量)。

所有数据结构都可以是动态的,即使用场景既包括数据更改也包括查询:

  • 线段树- 可以在 O(logn) 时间内添加/删除间隔(请参阅here http://3glab.cs.nthu.edu.tw/~spoon/courses/CS631100/Lecture05_handout.pdf)
  • 区间树- 可以在 O(logn) 时间内添加/删除间隔
  • 范围树- 可以在 O(logn) 时间内添加/删除新点(请参阅here http://www.cs.unb.ca/tech-reports/documents/TR95_100.pdf)
  • 二叉索引树- 每个索引的项目计数可以在 O(logn) 时间内增加

更高维度 (d>1):

  • 线段树- O(n(logn)^d) 预处理时间,O(k+(logn)^d) 查询时间,O(n(logn)^(d-1)) 空间
  • 区间树- O(n logn) 预处理时间,O(k+(logn)^d) 查询时间,O(n logn) 空间
  • 范围树- O(n(logn)^d) 预处理时间,O(k+(logn)^d) 查询时间,O(n(logn)^(d-1))) 空间
  • 二叉索引树- O(n(logn)^d) 预处理时间,O((logn)^d) 查询时间,O(n(logn)^d) 空间
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

线段树、区间树、二叉索引树和范围树有什么区别? 的相关文章

  • 如何仅使用单个数组在 JavaScript 中模拟调用堆栈

    我正在看维基百科页面 https en wikipedia org wiki Call stack在调用堆栈上 并尝试理解这个图像 据我所知 哈哈 const memory memory 0 3 top of stack pointer m
  • 7 张牌扑克手牌评估器

    有谁知道评估 7 张牌扑克牌的快速算法吗 这比简单地暴力检查 7 张牌中每 21 个 5 张牌的组合更有效 Cheers Pete 我写了一篇JavaScript 核心评估方法仅使用位操作 因此速度非常快 考虑到这一点 查看 21 种组合还
  • 带路径压缩算法的加权 Quick-Union

    有一种 带路径压缩的加权快速联合 算法 代码 public class WeightedQU private int id private int iz public WeightedQU int N id new int N iz new
  • 异或交换可以扩展到两个以上的变量吗?

    我一直在尝试将异或交换扩展到两个以上的变量 例如n变量 但我没有得到比这更好的地方3 n 1 对于两个整型变量x1 and x2你可以像这样交换它们 swap x1 x2 x1 x1 x2 x2 x1 x2 x1 x1 x2 所以 假设你有
  • 直接选择排序与交换选择排序

    有什么区别直接选择排序 vs 交换选择排序 今天我陷入了一场争论 我的教授在他的讲义中使用了这两个术语 维基百科和任何教科书或网站都会为您提供的选择排序就是他所说的 交换选择排序 我以前从未听说过 交换选择排序 这个术语 仅 选择排序 并且
  • 迭代任意大小的子集

    我可以迭代大小为 1 的子集 for int a 0 a lt size a 或大小为 2 的子集 for int a1 0 a1 lt size a1 for int a2 a1 1 a2 lt size a2 or 3 for int
  • 如何从迭代器推导连续内存

    不知何故 本土stl copy VC Dinkumware 上的算法表明它可以使用memcpy 可以轻松复制的数据 一个凡人能做到这一点吗 假设每个元素都是普通可复制的 random access iterator 是否意味着连续内存 标准
  • 大数据使用什么数据结构

    我有一个包含一百万行的 Excel 工作表 每行有 100 列 每行代表一个具有 100 个属性的类的实例 列值是这些属性的值 哪种数据结构最适合在这里使用来存储数百万个数据实例 Thanks 这实际上取决于您需要如何访问这些数据以及您想要
  • 我该如何实现这个折叠功能呢?

    给出了两种数据类型 颜色 和 植物 data Color Red Pink White Blue Purple Green Yellow deriving Show Eq data Plant Leaf Blossom Color Stal
  • 每个术语出现的次数

    我得到了一个数组a n 2 where n can be 10 5最大时有n个科目和n个学生 全部编号为 1 2 n a i 0 and a i 1 1 lt i lt n 表示在第 i 个科目中 所有来自a i 0 to a i 1 通过
  • 有没有时间复杂度为O(N)的排序算法?

    大多数排序算法的复杂度为 O NN 或 O NlogN 来实现结果 但是 对于特定的输入集 有些算法的复杂度为 O N 我想知道是否有一种排序算法在所有情况下都具有 O N 的复杂度 如果您只能比较 检查两个项目是否为 正在排序的值 那么您
  • 需要解释搜索最小大和的算法

    我正在解决 Codility 问题作为练习 但无法回答其中一个问题 我在互联网上找到了答案 但我不明白这个算法是如何工作的 有人可以引导我逐步完成它吗 这是问题 You are given integers K M and a non em
  • 平铺单纯形噪声?

    我 作为业余爱好者 对伪随机噪声生成很感兴趣 特别是 Perlin 和 Simplex 算法 Simplex 的优点是速度 尤其是在更高的维度上 但 Perlin 可以相对容易地平铺 我想知道是否有人知道平铺单纯形算法 固定维度就好 泛型更
  • O(1) 算法确定节点是否是多路树中另一个节点的后代?

    想象一下下面的树 A B C D E F 我正在寻找一种方法来查询 F 是否是 A 的后代 注意 F 不需要是directA 的后代 在这种特殊情况下这是正确的 只需要针对更大的潜在后代节点池测试有限数量的潜在父节点 当测试一个节点是否是潜
  • 动态规划 (DP) 中的重叠子问题是什么?

    为了使动态规划适用 问题必须具有两个关键属性 最优子结构 and 重叠子问题 1 https en wikipedia org wiki Dynamic programming 对于这个问题 我们只关注后一个属性 有各种不同的定义重叠子问题
  • 将2-3-4树转换为红黑树

    我正在尝试将 2 3 4 树转换为 java 中的红黑树 但我无法弄清楚它 我将这两个基本类编写如下 以使问题简单明了 但不知道从这里到哪里去 public class TwoThreeFour
  • 从 1 到 20 亿,像 (23,29) 这样相差 6 的连续素数对的数量

    如何在考虑时间复杂度的情况下从 1 到 20 亿 使用任何编程语言且不使用任何外部库 找到像 23 29 这样相差 6 的连续素数对的数量 尝试过埃拉托色尼筛 但获得连续素数是一个挑战 使用了生成器 但时间复杂度非常高 代码是 def ge
  • 列出所有 k 元组,其条目总和为 n,忽略旋转

    有没有一种有效的算法来查找所有序列k总和为的非负整数n 同时避免旋转 如果可能的话 完全避免 顺序很重要 但对于我正在解决的问题来说 轮换是多余的 例如 与k 3 和n 3 我想要得到一个如下所示的列表 3 0 0 2 1 0 2 0 1
  • AStar-名称解释

    我正在寻找 AStar A 算法为何被称为 AStar 的解释 所有类似的 最短路径问题 算法通常都以其开发者的名字命名 那么 AStar 代表什么 有称为 A1 和 A2 的算法 后来证明A2是最优的 实际上也是可能的最好算法 所以他给它
  • 在 Haskell 中获取玫瑰树的根

    最近我开始学习 Haskell 并在以下练习中遇到困难 Write functions root Rose a gt a and children Rose a gt Rose a that return the value stored

随机推荐

  • 基类和派生类中的依赖注入

    我有一个抽象的控制器基类 所有操作控制器都派生自它 基本控制器类在构造时初始化视图对象 所有动作控制器都使用此 View 对象 每个动作控制器都有不同的依赖关系 这是通过使用 DI 容器来解决的 问题是控制器基类还需要一些依赖项 或参数 例
  • 如何找出运算符“+”的类型?

    在 GHCi 版本 8 6 3 中 https repl it languages haskell https repl it languages haskell 我想知道如何找出运算符 的类型 我想看看它的类型是否是num a b c g
  • RSA:使用扩展欧几里得算法计算私钥

    我是一名高中生 正在写一篇关于 RSA 的论文 我正在用一些非常小的素数做一个例子 我了解系统的工作原理 但我一生都无法使用扩展欧几里得算法来计算私钥 这是我到目前为止所做的 我选择了质数 p 37 q 89 计算出 N 3293 我计算了
  • 在我的 Android 应用程序中禁用屏幕截图

    我有我当前的 Android 应用程序不允许用户截屏 我在用 getWindow setFlags LayoutParams FLAG SECURE LayoutParams FLAG SECURE 在我的 onCreate 方法中并且工作
  • 使用 OpenGL 的 2D 示例 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个非常简单的教程 仅使用 OpenGL 进行 2D 绘图 我的问题是我想用 OpenGL 绘
  • 陷入构建 MySQL 查询的困境

    给出一个表的例子 id item id user id bid price 任务是选择rows with minimum bid price对于每个item id在提供的集合中 例如 item id 1 2 3 所以我需要选择最多三 3 行
  • 计算列表中元素出现次数的Pythonic方法是什么?

    这就是我所做的 python 有更好的方法吗 for k in a list if kvMap has key k kvMap k kvMap k 1 else kvMap k 1 Thanks 使用默认字典 from collection
  • 如何找到这个堆栈跟踪?

    我的程序一直崩溃 但是logcat没有显示任何异常 我刚刚收到以下消息 以及大量有关 CPU 使用情况的统计信息 显然我使用了太多的 CPU 但我不知道我的程序的哪一部分正在执行此操作 下面的文件在哪里 我找不到它 12 30 23 13
  • 整数的布尔运算[重复]

    这个问题在这里已经有答案了 这可能是非常基本的 但我似乎不明白 如何 2 1 0 3 1 1 4 1 0 etc 上面的这个模式似乎有助于找到偶数 or 0 1 1 1 1 1 2 1 3 3 1 4 4 1 5 5 1 5 我知道布尔代数
  • 为什么人们在 C++ 中的头文件名中不使用大写字母?

    我想知道为什么人们不在头文件名称中使用大写字母 我看到许多头文件的名称仅是小写的 但我认为如果他们用大写字母写 比如 BaseClass h SubClass h 而不是 baseclass h subclass h 会更容易阅读 这是为什
  • Django - 更改内联表单集文本输入大小属性

    我有一个内联表单集 只有三个字段 class Estimate Product Details models Model proposalID models ForeignKey Estimate Construction verbose
  • v11.4.2 中的 FirebaseAuth signInWithEmailAndPassword() 没有响应

    我已升级到 Firebase Android 库 v11 4 2 以便在我的 Android 应用程序上试用 Firestore 但是 当我尝试使用 FirebaseAuth 通过 signInWithEmailAndPassword 登录
  • 如何使用 iOS 应用程序在 iPad/iPhone 中打开 PDF 文件?

    如何使用我自己的应用程序打开存储在 iPad iPhone 中的 PDF 文件 您可以使用 UIwebview 来加载它 这很简单 如果您想要更大的灵活性 您应该使用 Quartz 框架类 EDIT 要查看下载的 PDF 您可以在应用程序中
  • SubSonic 3 和 MySQL,在 CleanUp() 方法中从列名中删除下划线会导致在 linq-query 中使用属性时出现异常

    我在使用 SubSonic 3 0 0 3 ActiveRecord 和 MySQL 时遇到了问题 由于 MySQL 不允许您在表名或列名中使用大写字母 或者如果您这样做 则忽略它 我决定使用下划线分隔单词 例如entity id 然后使用
  • 如何将一个数字分成n组

    我需要将一个数字分成几组数字 然后将这些数字放入一个数组中 然后我将对这些数字进行一些简单的数学运算 然后将它们插入到文本框中 到目前为止 我只找到了如何将数字拆分为单独的数字 如下所示 var number 12354987 output
  • python Fabric是否支持动态设置env.hosts?

    我想动态更改 env hosts 因为有时我想先部署到一台机器 检查是否正常 然后部署到多台机器 目前我需要先设置 env hosts 如何在方法中设置 env hosts 而不是在脚本启动时全局设置 是的 你可以设置env hosts动态
  • MySQL > 表不存在。但它确实(或者应该)

    我更改了 MySQL 安装的数据目录 除了一个之外 所有库都正确移动 我可以连接并且USE数据库 SHOW TABLES还正确返回所有表 并且每个表的文件都存在于 MySQL 数据目录中 然而 当我尝试SELECT表中的某些内容 我收到一条
  • 内存分配问题

    这个问题是在面试的笔试中被问到的 include
  • 使用 FileProvider 从图库中选取图像文件

    编译 Android N 我遇到了一个问题FileProvider 我需要让用户从图库中选择图像 用相机拍照 然后将其裁剪为正方形 我已经成功实现了FileProvider用于用相机拍摄图像 但我在从图库中选取图像时遇到严重问题 问题是 在
  • 线段树、区间树、二叉索引树和范围树有什么区别?

    线段树 区间树 二叉索引树和范围树之间有什么区别 关键思想 定义 应用领域 更高维度的性能 秩序 空间消耗 请不要仅仅给出定义 所有这些数据结构都用于解决不同的问题 线段树存储间隔 并针对 这些区间中的哪一个包含给定点 查询 区间树也存储间