根节点区间长度为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的情况,最后会不会导致树的层数比整数次幂大呢?