线段树为什么要开4倍空间

来源:互联网 发布:我的世界手机版龙珠js 编辑:程序博客网 时间:2024/05/17 06:19

假设我们用一个数组来头轻脚重地存储一个线段树,根节点是1,孩子节点分别是2n, 2n+1, 那么,设线段长为L(即[1..L+1))

img

设树的高度为H,对H,有:

H(L)={1,1+H(L2),L = 1L > 1

这是一个很简单的递归式,并用公式(http://scinart.github.io/math/2014/03/16/QA39.2.G733-1994-CM-3/#mjx-eqn-3.11)逐次代换,就等到

H(L)=k+H(L2k), k 2kL

所以

H(L)=lgL+1.

所以显然所需空间为

      2^H1=2^(lgL+1)1

=2×2^(lgL⌉)1

=2×2(L1)1,L2

=4L5,L2

-- EOF --(过程来自于http://scinart.github.io/acm/2014/03/19/acm-segment-tree-space-analysis/)跟大家一起分享下!
2 0