线段树数组 2 * 2 ^(ceil(log(n))) - 1 的内存如何?

2023-12-27

链接:http://www.geeksforgeeks.org/segment-tree-set-1-sum-of-given-range/ http://www.geeksforgeeks.org/segment-tree-set-1-sum-of-given-range/。这是引用的文字:

We start with a segment arr[0 . . . n-1]. And every time we divide the current segment into two halves(if it has not yet become a segment of length 1), and then call the same procedure on both halves, and for each such segment, we store the sum in the corresponding node. All levels of the constructed segment tree will be filled except the last level. Also, the tree will be a Full Binary Tree because we always divide segments into two halves at every level. Since the constructed tree is always a full binary tree with n leaves, there will be n-1 internal nodes. So the total number of nodes will be 2n – 1. The height of the segment tree will be ceil[log(n)]. Since the tree is represented using array and relation between parent and child indexes must be maintained, size of memory allocated for segment tree will be .

内存是如何分配的(上面段落的最后一行)那么多?如果正确的话,父索引和子索引如何存储在代码中?请给出这背后的理由。如果这是错误的,那么正确的值是多少?


这里发生的情况是,如果有一个包含 n 个元素的数组,那么线段树将为这 n 个条目中的每一个条目都有一个叶节点。因此,我们有 (n) 个叶节点,以及 (n-1) 个内部节点。

节点总数= n + (n-1) = 2n-1 现在,我们知道它是一棵满二叉树,因此高度为: ceil(Log2(n)) +1

总数节点数 = 2^0 + 2^1 + 2^2 + … + 2^ceil(Log2(n)) // 这是一个几何级数,其中 2^i 表示第 i 层的节点数。

G.P.求和公式= a * (r^大小 - 1)/(r-1) 其中 a=2^0

总数节点数 = 1*(2^(ceil(Log2(n))+1) -1)/(2-1)

= 2* [2^ceil(Log2(n))] -1(数组中的每个内部节点和叶节点都需要空间),因此它是大小的数组。

= O(4 * n) 大约..

你也可以这样想,设下图为线段树:

    10
   /  \
  3    7
 /\    /\
1  2  3  4

如果上面是你的线段树,那么你的线段树数组将是:10,3,7,1,2,3,4,即第0个元素将存储第1个和第2个条目的总和,第1个条目将存储第1个和第2个条目的总和第三、第四和第二将存储第五和第六条目的总和!

另外,更好的解释是:如果数组大小n是 2 的幂,那么我们正好有n-1内部节点,总结为2n-1总节点数。但并非总是如此,我们有n作为 2 的幂,所以我们基本上需要 的最小幂2这大于n。这意味着,

int s=1;
for(; s<n; s<<=1);

你可能会看到我同样的答案here http://discuss.codechef.com/questions/64305/how-is-the-memory-of-the-array-of-segment-tree-2-2-ceillogn-1

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

线段树数组 2 * 2 ^(ceil(log(n))) - 1 的内存如何? 的相关文章

  • JSON-LD 构建单个对象数组

    有没有办法将单个对象强制放入数组 每次都测试对象类型真的很烦人 我尝试了这个上下文 但它不起作用 还有JSON LD Playground 中的示例 http tinyurl com ph7p35v 通过此上下文 资源将转换为单个对象 而不
  • 选取散列第 N 个元素的最快方法

    我有一个大哈希表 带有字符串索引的数组 并正在寻找一个函数quickly从中选取第一个 理想情况下也是第 N 个 元素 array shift and reset 对于我的需求来说太慢了 UPDATE 我也不是在寻找基于引用的解决方案 该函
  • 从 n,k 维矩阵数组中减去 n,k 维矩阵

    如果我有一个数组A A lt array 0 c 4 3 5 for i in 1 5 set seed i A i lt matrix rnorm 12 4 3 如果我有矩阵 B set seed 6 B lt matrix rnorm
  • Excel:#CALC!使用 MAP 函数计算间隔重叠时出现错误(嵌套数组)

    我正在努力解决以下公式 它适用于某些情况 但不适用于所有情况 名字input有失败的数据集 得到一个 CALC 描述 嵌套数组 错误 LET input N1 0 0 N1 0 10 N1 10 20 names INDEX input 1
  • Numpy - 根据表示一维的坐标向量的条件替换数组中的值

    我有一个data多维数组 最后一个是距离 另一方面 我有距离向量r 例如 Data np ones 20 30 100 r np linspace 10 50 100 最后 我还有一个临界距离值列表 称为r0 使得 r0 shape Dat
  • 尝试使用 Javascript 解决对称差异

    我正在尝试找出对称的解决方案 使用 javascript 完成以下任务的差异 目标 接受未指定数量的数组作为参数 保留数组中数字的原始顺序 不删除单个数组中数字的重复项 删除数组中出现的重复项 因此 例如 如果输入是 1 1 2 6 2 3
  • JS:连接数组的数组

    我如何在数组的每个子成员和数组本身上使用 Array Join 来分隔父数组的元素 以及子数组的每个元素 let arr 1 2 3 4 5 6 console log arr join Output is 1 2 3 4 5 6 Pseu
  • 如何将我的 json 字符串 avro 二进制编码为字节数组?

    我有一个实际的 JSON 字符串 我需要将其 avro 二进制编码为字节数组 在经历了Apache Avro 规范 http avro apache org docs 1 7 7 spec html 我想出了下面的代码 我不确定这是否是正确
  • 如何将一个变量的字符串分配给另一变量?

    这是我在这个网站上的第一个问题 如何将一个变量的字符串分配给另一变量 我在这里做错了什么 include
  • 将数组字段组合成单个数组字段 mongo

    我正在使用 mongo 版本 3 4 3 我的文档存储在 mongo 中 如下所示 id ObjectId 5ad5ab8aaf2808b739ba6ab2 ResumeId 105839064 ResumeDetails WorkProf
  • 在应用 varImp 函数时使用带插入符号的 xgbTree 方法和目标变量的权重时出现非树模型错误

    当我使用 Caret 包中的 train 函数创建模型以使用权重进行梯度提升时 在使用 varImp 函数时出现错误 表示它没有检测到树模型 但当我去掉重量时它就起作用了 下面的代码产生错误 set seed 123 model weigh
  • 如何提高包含大量小图像的 UCollectionView 的性能?

    在我的 iOS 应用程序中我有UICollectionView显示大约 1200 个小 35x35 点 图像 图像存储在应用程序包中 我正确地重用了UICollectionViewCell但仍然存在性能问题 具体取决于我处理图像加载的方式
  • O(1) 算法确定节点是否是多路树中另一个节点的后代?

    想象一下下面的树 A B C D E F 我正在寻找一种方法来查询 F 是否是 A 的后代 注意 F 不需要是directA 的后代 在这种特殊情况下这是正确的 只需要针对更大的潜在后代节点池测试有限数量的潜在父节点 当测试一个节点是否是潜
  • JNI 将 Char* 2D 数组传递给 JAVA 代码

    我想从 C 代码通过 JNI 层传递以下指针数组 char result MAXTEST MAXRESPONSE 12 12 8 3 29 70 5 2 42 42 在java代码中我写了以下声明 public static native
  • jQuery / Ajax:如何循环遍历数组作为 Ajax 成功函数的一部分

    我有一个阿贾克斯调用返回一个数组并需要对该数组中的每个值执行某些操作 到目前为止 我有以下内容 但这会返回以下错误 Uncaught TypeError Cannot use in operator to search for length
  • 公式的后序遍历

    在数据结构中 我将按顺序转换和预排序公式转换为树 不过 我不太擅长后期订购 对于给定的公式x y z a b c 我想出了 divide x c y z a b 在大多数情况下 这似乎很合适 除了左子树中的 是牌组中的小丑 在后序遍历中 最
  • 处理大数据二进制文件

    我正在处理包含原始数据的大型二进制文件 每个大约 2 GB 这些文件具有明确定义的结构 其中每个文件都是一个数组events 每个事件都是一个数组data banks Each event and data bank有一个结构 header
  • 使用redis进行树形数据结构

    我需要为基于树的键值开发一个缓存系统 与Windows注册表编辑器非常相似 其中缓存键是字符串 表示树中到值的路径 可以是原始类型 int string bool double 等 或子树本身 例如 key root x y z w val
  • 从应用程序内部监视 ASP.NET 应用程序内存

    我正在寻找一种方法让应用程序本身监视它正在使用的内存量 这样我就可以每小时左右将其记录在日志文件中 并密切关注应用程序的使用情况 它全部托管 因此我们可以对系统进行更改以查看发生了什么 因此解决方案必须来自应用程序代码内 我们将来可能会使用
  • 为什么我不应该对不是由 malloc() 分配的变量调用 free() ?

    我在某处读到 使用它是灾难性的free删除不是通过调用创建的对象malloc 这是真的 为什么 这是未定义的行为 永远不要尝试它 让我们看看当您尝试时会发生什么free 自动变量 堆管理器必须推断出如何获取内存块的所有权 为此 它要么必须使

随机推荐

  • 绘制矩形多维数组

    我目前正在开发库存系统 但是我在弄清楚应该如何绘制它时遇到问题 我有一个矩形数组 如下所示 Rectangle Inventoryslots new Rectangle 24 24 slots 现在我想将插槽绘制为6 4列 宽度为6个插槽
  • 一种更好的算法来查找数字字符串的下一个回文

    首先这里有一个问题 如果从左到右和从右到左读取的正整数在十进制系统中的表示相同 则该正整数称为回文 对于给定的不超过1000000位的正整数K 将大于K的最小回文数的值写入输出 显示的数字始终不带前导零 输入 第一行包含整数 t 即测试用例
  • CSS滑动边框

    感谢 codeSpy 我得到了这个 http jsfiddle net p9tBR http jsfiddle net p9tBR 我不知道如何在更改页面时更改蓝线 例如 如果我在第 2 页 我希望蓝线位于 2 而不是 1 的下方 当我在第
  • 同一目录中的两个不同的 Git 存储库

    我想维护两个不同的 git 存储库 存储库应保留在同一根目录中 如何实现 我想要的是 管理两个略有不同的存储库 我可以在同一目录中有两个完全不同的存储库吗 您可以通过在 git 命令本身上添加使用以下两个选项之一来实现此目的 git wor
  • 如何给UITextView实现搜索功能?

    我有40多个观点 各有各的观点UITexView 我想实现一个搜索功能 允许用户跨域搜索UITextViews 实际上 我什至不知道如何实现 1 的搜索功能UITextView 因此我不知道这是否可能 我已经在网上搜索并在这里寻找它 但没有
  • 锯齿状数组类型属性

    假设我有这样的财产 public int MyProperty get set 调用代码可以自由更改数组的值 而且还可以替换数组本身 通过隐藏设置器可以轻松防止这种情况 如下所示 public int MyProperty get priv
  • 用c++例子解释Facade模式?

    我已经与维基百科文章 http en wikipedia org wiki Facade pattern 并且似乎缺少代码示例的 C 版本 如果没有这个我就无法完全理解 Facade 模式 你能用 C 帮我解释一下吗 外观模式 为复杂的子系
  • 如何将标签添加到 Bootstrap 对话框页脚

    需要添加bootstrap页脚上的标签bootstrap3 dialog 根据本教程 http nakupanda github io bootstrap3 dialog 只能在页脚区域添加按钮 BootstrapDialog show t
  • NPM:找不到模块“uuid”

    当我尝试使用 npm 时 我收到此消息 gt npm module js 472 throw err Error Cannot found module uuid at Function Module resolveFilename mod
  • C# 中的多客户端/服务器聊天程序?

    客户将能够一对一和群组聊天 温和的房间 类似于 Skype 我将使用服务器来授权客户端 我的问题是哪个更好 WCF 或 TCPClient StreamReader 和 StreamWriter cheesr 我还没有使用过 WCF 但我可
  • 如何从 Grails 控制器和视图外部引用 Grails 域类字段?

    我有域类 class Child static hasMany toys Toy String name Set toys class Toy static belongsTo owner Child String name 在我的 JSP
  • 根据部分字符串选择数组键

    我有一个数组 在该数组中我有一个数组键 如下所示 show me 160该数组键可能会发生一些变化 因此有时页面可能会加载 并且数组键可能会发生变化show me 120 我想现在可以只字符串匹配数组键直到最后一个 这样我就可以检查最后一个
  • 从其他文档追加子元素

    在我的程序中 我必须创建一些文档创建器 并且我想将创建元素的功能拆分为多个类 每个类将创建一个元素 主要创建者将通过接口提取该元素并将其附加到主体 问题是我不想将任何参数传递给构造函数调用 例如 creator createDocument
  • window.URL.createObjectURL(blob);在我的应用程序中未定义

    我仅在我的应用程序中遇到此问题 与浏览器 IE 和 Chrome 无关 如果我检查window URL createObjectURL blob 在两个浏览器中任何其他页面的控制台中 其工作正常 但它window URL createObj
  • IntelliJ IDEA 在 JPQL 中突出显示带有“无法解析符号”的 @Entity 类名称

    IntelliJ IDEA 在 JPQL 中用红色突出显示持久的 Entity 类名称 无法解析符号 这会分散注意力并埋葬真正的问题 因此 例如 我在存储库中声明一个查询 private static final String READ B
  • Java 石头剪刀布游戏 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我是编程新手 我正在尝试用 Java 编写一个非常简单的石头剪刀布游戏 它将编译并运行良好 但我希望说一些类似 无效的移动 再试一次
  • Python ABC 多重继承

    我认为代码比我用文字能更好地解释问题 这是 my abc py 中的代码 from abc import ABCMeta abstractmethod class MyABC object metaclass ABCMeta abstrac
  • 在 bot 目录中注册后,是否可以在 Microsoft Teams 或 Skype 中测试我的 Bot 应用程序但无需发布它?

    我已在 MS Bot 目录中注册了我的机器人应用程序 我可以使用 Bot Framework Emulator 与我的消息端点进行通信 但当我在 MS 团队和 Skype 中尝试同样的操作时 机器人没有回复我的消息 是的 这是可能的 你需要
  • 没有这样的文件来加载 active_record/associations/has_and_belongs_to_many_association

    我在 Gemfile 中添加了composite primary keys gem 在本地环境中它运行良好 但在 centos 机器上它会出现以下错误 在这两个环境中 Ruby 版本为 1 9 2p290 rubygems 版本为 1 3
  • 线段树数组 2 * 2 ^(ceil(log(n))) - 1 的内存如何?

    链接 http www geeksforgeeks org segment tree set 1 sum of given range http www geeksforgeeks org segment tree set 1 sum of