如您所述,Akra–Bazzi定理表明,对于所有递归都是。但是,这并没有揭示对的依赖的性质。为了确定后者,我们可以使用递归树方法。ø (Ñ 登录Ñ )p ∈ (0 ,1 )pT(n,p)O(nlogn)p∈(0,1)p
递归树的根是间隔。它的两个子元素是间隔和,它们的总长度再次为。这些节点中的每个节点都有两个子节点(假设足够大),依此类推。为了简单起见,我们忽略了舍入误差,也就是说,我们假设是一个整数。这只是技术问题,我不会为此担心。只要节点的长度最大为我们就会停止该过程。算法的复杂度与树中间隔的总长度成正比。当,叶子{ 1 ,… ,p n } { p n + 1 ,… ,n } n n p n 1 p ≠ 1 / 2{1,…n}{1,…,pn}{pn+1,…,n}nnpn1p≠1/2 (停止过程的节点)的深度不同,这使得确定整体复杂性变得更加困难。
通过注意到树最多具有级别,我们可以获得一个简单的上限:每个节点至少比其父节点小倍。就像在分析,间隔中的任何级别的总长度为至多,我们获得上界的上运行时间。由于和对于小,我们可以写成。1 - p p = 1 / 2 Ñ ø (Ñ 日志1 - p(1 / Ñ ))日志1 - p(1 / Ñ )= 日志ñ /日志(1 - p )− 1 log (1 − p )− 1log1−p(1/n)1−pp=1/2nO(nlog1−p(1/n))log1−p(1/n)=logn/log(1−p)−1p O (n log n / p )log(1−p)−1=−log(1−p)=p±O(p2)pO(nlogn/p)
这是一个更准确的计算。考虑等级。假设我们在达到很小的间隔时就不会停止该过程。我们可以通过采取步来生成随机顶点,在每个步中,我们以概率左(说),以概率右(说)。每次我们向左走时,间隔长度的对数减少,而每次我们向右走时,它的间隔减少。顶点在实际log的树中,其长度最多减少。级别上间隔的总权重ttp1−p−logp−log(1−p)lognt树的精确度恰好是根据此过程生成的顶点对应于最多减少的概率。即,如果是其等于分配的概率为,并的概率为,和是独立的,则级别总权重为。对于超常数,随机变量大致呈正态分布,均值且方差为线性lognD−logpp−log(1−p)1−pX1,…,Xt∼DtPr[X1+⋯+Xt≤logn]tX1+⋯+Xt[−plogp−(1−p)log(1−p)]tt,因此对于满足来说,概率将非常接近,而对于满足,也就是说,它将非常接近零。定义(称为二进制熵函数),我们得出结论,运行时间为(统一形式,如)。当我们有,因此我们之前的估计并不严格。t[−plogp−(1−p)log(1−p)]t≤(logn)/21t[−plogp−(1−p)log(1−p)]t≥2lognh(p)=−plogp−(1−p)log(1−p)Θ(nlogn/h(p))pn→∞p→0h(p)≈−plogp
查看同一分析的另一种方法是,像以前一样,使无限随机变量无限,并将停止时间定义为第一次这样。然后,运行时间与成正比。然后,基本更新定理指出,这意味着间隔的总大小等于。更准确地说,对于每个常数,间隔的总大小为,其中X1,X2,…TtX1+⋯+Xt≥lognnE[T]limn→∞E[T]/logn=1/E[D]=1/h(p)(1+o(1))nlogn/h(p)p(1+αp(n))nlogn/h(p)αp(n)=o(n)。基本更新定理的收敛性在时间参数(在本例中为中呈指数关系,因此在应为多项式,即。对于任何,的收敛也可能是均匀的。lognnαp(n)=O(n−Cp)p∈(δ,1−δ)δ>0
总而言之,递归树中间隔的总长度与运行时间成正比,每个形式如下:其中和取相同的底,而是一个函数,取决于并且随着趋于。p
T(n,p)=(1+o(1))nlognh(p),
lognh(p)=−plogp−(1−p)log(1−p)o(1)p0n
此外,对于任何和任何,间隔的总长度的形式为其中且隐藏的大O常数仅取决于。特别是对于所有常数,
收敛速度很快。δ>0p∈(δ,1−δ)
T(n,p)=(1+O(n−Cδ))nlognh(p),
Cδ>0δp1,p2limn→∞T(n,p1)T(n,p2)=h(p2)h(p1),