剑歌与舞的博客

个人学习过程中的一些思考总结

线段树需要开4倍区间大小的数组的原因

上网搜了一下,大多写得乱七八糟深奥晦涩难懂,不易理解。其实原因很简单,就是底层不一定是满的,最坏情况下只两个叶子节点,这时就要开4倍空间以避免数组越界了。这篇写得就很好,推荐:点击打开链接

  1. struct list  
  2. {  
  3.     int left;  
  4.     int right;  
  5.     int _max;  
  6. }tree[maxn*4];  
如上述代码所示,我们在写线段树的模板时,别人会告诉我们开4倍的数组就不会溢出了,然而原因是什么,现在证明一下

首先线段树是一棵二叉树,最底层有n个叶子节点(n为区间大小)

那么由此可知,此二叉树的高度为,可证

然后通过等比数列求和求得二叉树的节点个数,具体公式为,(x为树的层数,为树的高度+1)

化简可得,整理之后即为(近似计算忽略掉-1)

证毕

转载地址:https://blog.csdn.net/smoggyxhdz/article/details/78895672



阅读更多
个人分类: 线段树
上一篇线段树之单点修改(斑点蛇上数斑点)
下一篇线段树之快速构树
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭