根节点区间长度为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)成立。

层数下限

什么时候层数会尽可能少呢?当然是每层都尽可能铺满,仅余下最后一层未铺满的情况。类似完全二叉树的样子。

  1. 当最后一层铺满时,层数为log2(N)+1

  2. 当最后一层未铺满时,?

后记

最开始的疑惑是如果N为2的整数次幂当然没有问题,很容易就划分出一棵满二叉树。当它不是整数次幂时,随着区间的划分必会出现左子树比右子树区间长度多1的情况,最后会不会导致树的层数比整数次幂大呢?

0 0
原创粉丝点击