转自: http://scinart.github.io/acm/2014/03/19/acm-segment-tree-space-analysis/
最近在看《具体数学》,这篇当做是一个练习吧。
假设我们用一个数组来头轻脚重地存储一个线段树,根节点是1,孩子节点分别是2n, 2n+1, 那么,设线段长为L(即[1..L+1))
设树的高度为H,对H,有:
H(L)={1,1+H(⌈L2⌉),L = 1L > 1
这是一个很简单的递归式,并用公式3.11逐次代换,就等到
H(L)=k+H(⌈L2k⌉),其中 k 是满足2k≥L的最小值
所以
H(L)=⌈lgL⌉+1.
所以显然所需空间为
2H−1==≤=2⌈lgL⌉+1−12×2⌈lgL⌉−12×2(L−1)−1,L≥24L−5,L≥2
-- EOF --