线段树 4n 开四倍空间的原因

1 篇文章 0 订阅
订阅专栏

线段树 4n

一、为何要使用线段树?
对于某一类问题,我们主要关注的是一个线段或者区间。对于给定区间,更新区间中一个元素或者一个区间的值,查询一个区间[i,j]的最大值、最小值,或者区间数字和。
线段树不一定满二叉树,也不一定是完全二叉树,但一定是平衡二叉树,下面是线段树元素个数n=2^k的情况,是满二叉树。

下面是线段树元素个数n!=2^k的情况,不是满二叉树,如下:
在这里插入图片描述
由于线段树是平衡二叉树,那么可以使用数组来表示:*把线段树想像成满二叉树(即使是上面这种情况,也想象成满二叉树)*。
满二叉树有下面的性质,想象成满二叉树后,我们可以利用这些性质。对于高度为h层的满二叉树有2h-1个元素,第h层有2(h-1)个元素,h从0~h-1,最后一层的结点数大致相当于前面所有层结点之和,大致相当于整体的一半。

思考:如果区间中共有n个元素,使用数组存储,需要多大的存储空间呢?

如果区间元素个数n=2^k,则构成的线段树为满二叉树,否则则不是,为了使用满二叉树的性质,可以把线段树构造成满二叉树,对于最后一层不存在的叶子结点也要构造出来,思考用多大的数组存储?
(1)区间元素个数n=2k,则满二叉树的最后一层全部是有效元素,而不是靠添加虚值才构成满二叉树。由满二叉树的性质可知,第k层有2k个元素(k从0开始计算),则共有k+1层,总的元素2(k+1)-1个。为了使用的更放心,多给一个空间,也就是2(k+1)-1+1个元素,即2^(k+1)=2n个元素。如下图的红框中的部分。
(2)区间元素个数n!=2k时,假设只多出一个元素,即n=2k+1,就需要多一层来存储,而且最后一层除了剩余的一个真实元素,其它都是虚值。原来需要k+1层,现在需要k+2层,新增的一层可以存储2^(k+1)个元素,即2n,加上之前层的2n,共4n。
在这里插入图片描述
所以不考虑添加元素,使用4n的静态空间就可以对付所有情况。

线段树空间为什么是 4倍
Monster_Day的博客
08-15 6444
下面我们来讲解线段树: 线段树有许多应用,给出一个序列,可以在任何一个区间内找到最大,和最小值。可以求区间和等等等等。那么应用就不多说了。毕竟能到这里来的我相信都是为了A题,并且了解线段树的吧! 废话不多说了。 线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。 对于线段树中的每一个非叶子节点[a,b],它
线段树建树
12-14
线段树是一种二叉树,也就是说,每个线段都可以用一二叉树表示 比如一个长度为4的线段可以如此表示: ——————————————-4 1————-2————-3————4 1 2 3 4 如果你要表示线段上的和,最上面的根...
线段树为什么要4倍空间
weixin_30699235的博客
09-02 420
问题1: 线段树空间只需要2*n即可??? 对于这种建图方式,建出来的并不是完全二叉树,而是具有完全二叉树性质(父节点为x,则左儿子为2x,右儿子为2x+1),好处:可以省掉许多并不需要的节点。由于具有完全二叉树这种性质,2*n空间一定不够用!!见下图: 问题2: 线段树空间只需要3*n即可??? 证明: 设长度为N的数组在线段树中,编号最靠右的节点为F(N)。(上...
为什么线段树4倍空间
qq_43803508的博客
07-28 5092
从上面也可以看出,如果线段树叶子结点为N个,那么n $\leq$ N 那么根据满二叉树的性质,除“最后一层”,的总结点数 $\leq$ 2N-1 如果“最后一层”满的话,“最后一层”节点数 $\leq$ 2N ————一共4N-1,所以4N也一定不会超内存
线段树空间4倍的原因
q779的博客
05-07 548
简单证明了一下 qwq
线段树为什么要辟4倍的空间
liqiming100的专栏
09-02 3465
  struct list { int left; int right; int _max; }tree[maxn*4]; 如上述代码所示,我们在写线段树的模板时,别人会告诉我们4倍的数组就不会溢出了,然而原因是什么,现在证明一下 首先线段树是一棵二叉树,最底层有n个叶子节点(n为区间大小) 那么由此可知,此二叉树的高度为,可证...
线段树需要4倍区间大小的数组的原因
077CYW的博客
04-17 770
上网搜了一下,大多写得乱七八糟深奥晦涩难懂,不易理解。其实原因很简单,就是底层不一定是满的,最坏情况下只两个叶子节点,这时就要4倍空间以避免数组越界了。这篇写得就很好,推荐:点击打链接[cpp] view plain copystruct list  {      int left;      int right;      int _max;  }tree[maxn*4];  如上述代码所示...
C语言线段树讲解
最新发布
06-15
- 线段树的高度与区间长度有关,为 `log2(n+1)` 向上取整,其中n为初始区间长度。 - 叶子节点的数量与根节点代表的区间长度相同。 - 节点的度数只有0或2,整个树的节点总数为 `2n - 1`。 - 两点间路径上的所有...
线段树_线段树_
10-01
线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点...而未优化的空间复杂度为2N,实际应用时一般还要4N的数组以免越界,因此有时需要离散化让空间压缩。
线段树模板
02-03
手打了一份线段树代码,用于c++编程, 线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,...而未优化的空间复杂度为2N,实际应用时一般还要4N的数组以免越界,因此有时需要离散化让空间压缩。
线段树(C++).pptx
04-09
 a,b,Left,Right这4个域是描述一棵线段树所必须的4个量。根据实际需要,我们可以增加其它的域,例如增加Cover域来计算该线段被覆盖的次数,bj域用来表示结点的修改标记(后面将会提到)等等。 线段树的建立  我们...
线段树为什么要四倍区间大小的数组
博客周
05-21 932
我的想法是,不能理解它,那就记住它!! 但是这里有大佬的想法,欢迎参观:https://blog.csdn.net/smoggyxhdz/article/details/78895672
线段树为什么要四倍空间
NK_test的博客
05-12 2618
转自: http://scinart.github.io/acm/2014/03/19/acm-segment-tree-space-analysis/ 最近在看《具体数学》,这篇当做是一个练习吧。 假设我们用一个数组来头轻脚重地存储一个线段树,根节点是1,孩子节点分别是2n, 2n+1, 那么,设线段长为L(即[1..L+1)) 设树的高度为H,对H,有: H(L)=
关于线段树4倍空间的探讨
ó
11-23 1657
声明: 线段树维护的区间范围也是[1,x],根节点从1始(1,2,3…) 建树过程参数记录当前节点rt,同时记录当前节点所对应的区间[l,r],而不是用一个结构体维护。 #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 void build(int l,int r,int rt){ //建树过程(参见网上大部分线段...
线段树4N空间证明
L_Aster的专栏
10-15 5047
线段树采用数组储存时,无疑,其储存空间利用与其左右子树定义有关 方式一: 左子树:[l,l+r2][l,\frac{ l+r}{2}] 右子树:[l+r2+1,r][\frac{ l+r}{2}+1,r] 方式二: 左子树:[l,l+r+12−1][l,\frac{ l+r+1}{2}-1] 右子树:[l+r+12,r][\frac{ l+r+1}{2}, r] 假设定义区间[1,5][1,5]的
为什么线段树需要4n的大小
04-25
线段树是一种常用的数据结构,用来高效地处理区间查询问题。它的主要思想是将区间拆成多个小区间进行处理,然后将处理结果合并起来。 为了方便处理区间,线段树通常采用完全二叉树的形式来表示。这样就可以用数组来存储整棵树,从而节省空间。具体来说,对于一个大小为n的区间,线段树需要使用一个长度为4n的数组来表示。其中,前n个元素存储原始数据,后面3n个元素存储线段树的节点信息,每个节点占用3个位置。 因为线段树的层数不会超过log2(n),所以4n空间复杂度可以保证线段树的完整性和性能,同时也保证了节点信息存储的空间足够。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 神经网络中偏置的作用 26081
  • 图像预处理:去均值、归一化、PCA、白化 16183
  • from skleran.cross_validation import KFold以及from sklearn.model_selection import KFold 3153
  • 安装 detectron2时要求安装pycocotools2.0.2 2919
  • 反向传播算法的数学理解实例 2771

分类专栏

  • 数据结构 1篇
  • 机器学习 1篇
  • 数据库
  • 算法
  • python 1篇
  • Linux
  • java设计模式 1篇
  • opencv 1篇
  • 深度学习 2篇
  • 计算机视觉
  • 图像处理 2篇
  • 论文笔记

最新评论

  • 线段树 4n 开四倍空间的原因

    sightONlast: 原来是这样,还是自己想太简单了,一直按照完全二叉树和完满二叉树的前提假设来思考,谢谢博主解答!

  • 线段树 4n 开四倍空间的原因

    特兰克斯___: 从树的性质角度证明, 非常棒

  • 安装 detectron2时要求安装pycocotools2.0.2

    前端小飞侠: 很好的一篇文章,可是就是我在卸载pycocotools时使用pip uninstall pycocotools时报错,卸载不了。我使用的是anaconda prompt命令行窗口 ERROR: Cannot uninstall 'pycocotools'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall. 请求博主能给个回复

  • 神经网络中偏置的作用

    鹧鸪QAQ: 最喜欢这种简单明了的文章了

  • 神经网络中偏置的作用

    「已注销」: "可以看出,当w0等于-5时,x=2时,输出值大致为0."这句中w0应为w1.

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • 安装 detectron2时要求安装pycocotools2.0.2
  • from skleran.cross_validation import KFold以及from sklearn.model_selection import KFold
  • 图片的双线性插值
2020年2篇
2019年1篇
2018年5篇
2017年5篇

目录

目录

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司大运网站推广系统布吉企业网站制作吉祥模板制作福田seo网站优化塘坑网站搭建光明模板制作南澳至尊标王龙华网站定制南山百姓网标王塘坑网站优化按天扣费平湖百度关键词包年推广民治seo网站优化大浪百姓网标王推广大芬高端网站设计爱联设计公司网站同乐百度seo东莞百度网站优化平湖seo排名福田SEO按天计费福永标王民治seo排名丹竹头如何制作网站龙华SEO按天扣费东莞seo优化福田seo排名同乐如何制作网站同乐模板制作坪山营销网站观澜关键词排名塘坑关键词按天收费歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化