根节点区间长度为N的线段树层数的上下限
来源:互联网 发布:ubuntu 桌面u盘路径 编辑:程序博客网 时间:2024/05/16 06:58
根节点区间长度为N的线段树,其层数的上下限
层数上限
记命题P(n)表示根节点区间长度从1,2,3到2^n的线段树,这些线段树的层数小于等于n+1。
1. 易知根节点区间长度为1的线段树层数为1;根节点区间长度为2的线段树层数为2;即当n=1时,P(n)成立。2. 假设当n=k(k>=1)时,P(n)成立,证明P(n+1)成立。3. 综合1、2两步,可知对任意自然数n>=1,命题P(n)成立。
其中第二步的证明过程如下:
对P(n+1)中的线段树按照区间长度从小到大拆成两部分,于是想要证明P(n+1)成立,只需证明后半部分线段树的层数上限小于等于n+2。
根据线段树的构造原理,对根节点作一次划分之后,其左右两棵子树的区间长度分别为:
<2^n - 2^(n-1) + 1, 2^n - 2^(n-1) >,<2^n - 2^(n-1) + 1, 2^n - 2^(n-1) + 1>,...<2^n - 1 , 2^n - 1 >,<2^n , 2^n - 1 >,<2^n , 2^n >.
可知这些子树的根节点区间长度与层数关系满足命题P(n)。 那么加上划分之前的真正的根节点,则有根节点区间长度从1,2,3到2^(n+1)的线段树,这些线段树的层数小于等于n+2,即P(n+1)成立。
层数下限
什么时候层数会尽可能少呢?当然是每层都尽可能铺满,仅余下最后一层未铺满的情况。类似完全二叉树的样子。
当最后一层铺满时,层数为log2(N)+1
当最后一层未铺满时,?
后记
最开始的疑惑是如果N为2的整数次幂当然没有问题,很容易就划分出一棵满二叉树。当它不是整数次幂时,随着区间的划分必会出现左子树比右子树区间长度多1的情况,最后会不会导致树的层数比整数次幂大呢?
0 0
- 根节点区间长度为N的线段树层数的上下限
- 找单向链表中离尾节点长度为n的节点
- [树]输出二叉树的节点层数
- 设平衡二叉排序树(AVL树) 的节点个数为n,则其平均检索长度为
- ZOJ 1610 Count the Colors (线段树+结点为长度为一的区间+树的遍历)
- 二叉树之查找指定节点所在的层数
- POJ1330 LCA/给树的节点标记层数
- 泛型的上下限
- java中泛型的上下限
- 泛型的上下限
- 线段树的数组大小下限及证明
- easyui 获得选中tree节点的层数
- 计算指定节点*p所在的层数
- 树的层数
- 寻找二叉树中长度为k的路径(根节点到叶子节点)
- 二叉树--创建,删除,交换;查找节点的层数,某层多少节点,叶子节点到根节点的路径,LCA
- 【HDU3530】【单调队列(双)】Subsequence 【长度为n的数列,求最长子区间的长度,使得区间的最大值与最小值的差满足一个范围】
- 【面试题】一条直线上N个线段所覆盖的总长度
- JavaScript权威指南_70_第9章_类和模块_9.0-概述
- MVC编程模式
- #pragma预处理命令
- 读书笔记
- 图解Git
- 根节点区间长度为N的线段树层数的上下限
- 二进制中1的个数
- LeetCode Balanced Binary Tree
- Runtime类中的freeMemory,totalMemory,maxMemory方法,查看内存情况
- springMVC对异常处理的支持
- MyEclipse折叠当前类所有代码快捷键
- 用于企业解决方案的新网络功能与合作伙伴
- 错误:stack around the variable * was corrupted
- JavaScript权威指南_71_第9章_类和模块_9.1-类和原型