算法学习之求解递归式~主定理

    科技2022-08-25  103

    算法学习之求解递归式~主定理

    文章目录

    算法学习之求解递归式~主定理 一、主定理定义 二、主定理应用 三、参考文献

    一、主定理定义

    令a>=1和b>1是常数,f(n) 是一个函数,T(n) 是定义在非负整数上的递归式: T ( n ) = a T ( n / b ) + f ( n ) T(n)=aT(n/b)+f(n) T(n)=aT(n/b)+f(n)其中我们将n/b解释为 ⌊ n / b ⌋ 或 ⌈ n / b ⌉ \lfloor n/b \rfloor 或 \lceil n/b \rceil n/bn/b那么T(n) 有如下渐进界: 1. 若 对 某 个 常 数 ε > 0 , 有 f ( n ) = O ( n log ⁡ b a − ε ) ; 1.若对某个常数ε>0,有f(n)=O(n^{\log b^{a-\varepsilon}}) ; 1.ε>0,f(n)=O(nlogbaε); 则 T ( n ) = Θ ( n log ⁡ b a ) 则T(n)=\varTheta(n^{\log b^a}) T(n)=Θ(nlogba) 2. 若 有 f ( n ) = Θ ( n log ⁡ b a ) ; 则 T ( n ) = Θ ( n log ⁡ b a lg ⁡ n ) 2.若有f(n)=\varTheta(n^{\log b^a}) ;则 T(n)=\varTheta(n^{\log b^a}\lg n) 2.f(n)=Θ(nlogba);T(n)=Θ(nlogbalgn) 3. 若 对 某 个 常 数 ε > 0 , 有 f ( n ) = Ω ( n log ⁡ b a + ε ) 3.若对某个常数ε>0,有 f(n)=\varOmega(n^{\log b^{a+\varepsilon}}) 3.ε>0,f(n)=Ω(nlogba+ε) 且 对 某 个 常 数 c < 1 和 所 有 足 够 大 的 n 有 a f ( n / b ) < = c f ( n ) , 且对某个常数c<1和所有足够大的n有af(n/b)<=cf(n) , c<1naf(n/b)<=cf(n), 则 T ( n ) = Θ ( f ( n ) ) 则T(n)=\varTheta(f(n)) T(n)=Θ(f(n))

    在使用主定理之前,我们来理解一下它的含义。对于三种情况中的每一种,我们将函数f(n) 与函数 n^(log b^a) 进行比较。两个函数较大者决定了递归式的解。对于情况一:若f(n) 渐进小于函数 n^(log b^a) ,要相差一个因子n^ε ,其中ε 是大于0的常数。对于情况三:除了要满足条件f(n) 渐进大于函数 n^(log b^a) ,还要满足“正则”条件af(n/b)<=cf(n) .

    二、主定理应用

    例子:已知一个算法运行时间的递归式为: T ( n ) = 2 T ( n / 2 ) + Θ ( n ) T(n)=2T(n/2)+\varTheta(n) T(n)=2T(n/2)+Θ(n);根据主定理,求出递归式的解。 解: 由主定理可知:a=2, b=2, f(n)=Θ(n) n log ⁡ b a = n log ⁡ 2 2 = n n^{\log b^a}=n^{ \log 2^2}=n nlogba=nlog22=n f ( n ) = Θ ( n ) = Θ ( n log ⁡ 2 2 ) = Θ ( n log ⁡ b a ) f(n)=\varTheta(n) = \varTheta(n^{\log 2^2}) = \varTheta(n^{\log b^a}) f(n)=Θ(n)=Θ(nlog22)=Θ(nlogba)满足主定理第2种情况,所以递归式的解为 T ( n ) = Θ ( n log ⁡ b a lg ⁡ n ) = Θ ( n log ⁡ 2 2 lg ⁡ n ) = Θ ( n lg ⁡ n ) T(n)=\varTheta(n^{\log b^a}\lg n)=\varTheta(n^{\log 2^2}\lg n)=\varTheta(n\lg n) T(n)=Θ(nlogbalgn)=Θ(nlog22lgn)=Θ(nlgn)

    三、参考文献

    以上内容出自《算法导论》

    Processed: 0.019, SQL: 9