首页 > 其他 > 详细

主定理

时间:2021-09-06 03:26:07      阅读:23      评论:0      收藏:0      [点我收藏+]

在CSP初赛题中,经常会遇到计算一个递推算法的时间复杂度的题目。 对于这类题,如果凭直觉去做,虽说许多情况都能算(蒙)对,但对于稍稍复杂一点的多项式来说,靠直觉去求解就非常困难了,这时可以用主定理来秒杀。

主定理是分治算法分析中非常重要的定理。


例如,我们要处理一个规模为n的问题,通过分治得到a个规模为$\frac{n}{b}$的问题(假设每个子问题的规模基本一样),$f(n)$为递推以外的计算工作,则其时间复杂度的递推式为:

$T(n)=aT(\frac{n}{b})+f(n)$

如果$a≥1$,$b>1$为常数,$f(n)$为函数,$T(n)$为非负整数,$\Theta(n^{log_ba})$为基准函数,那么:

1. 若$f(n)<\Theta(n^{log_ba})$,则$T(n)=\Theta(n^{log_ba})$

2. 若$f(n)>\Theta(n^{log_ba})$,则$T(n)=f(n)$

3. 若$f(n)=\Theta(n^{log_ba})$,则$T(n)=\Theta(n^{log_ba}logn)$

以上仅仅是本人为简化记忆而整理而成的,若想知道严谨的表述,详见百度百科。若想要更深入地理解主定理并了解其证明,详见这篇博客

例题:
(今天上午打的CSP模拟赛)

假设某算法的计算时间表示为递推关系式

$??(??)=3??(\frac{??}{2})+Θ(??),??(1)=Θ(1)$

则算法的时间复杂度为 ( )

A. $Θ(??)$

B. $Θ(??log_23)$

C. $Θ(??log??)$

D. $Θ(??^{log_23}log??)$



显然,在这里$a=3,b=2,f(n)=Θ(n)$

则基准函数
$Θ(n^{log_ba})=Θ(n^{log_23})>Θ(n)=f(n)$

即$f(n)<\Theta(n^{log_ba})$,符合定理第1条,则:

$T(n)=\Theta(n^{log_ba})=\Theta(n^{log_23})$,选B。

主定理

原文:https://www.cnblogs.com/void-null/p/15227387.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!