胡搞主定理

今天看算导,看到主定理这一块各种渐进、多项式大于小于什么的让我拙计,现在分享一下。

所谓主定理,就是用来解递归方程的一种方法,此方法可以用来求解大多数递归方程。

设递归方程为T(n)=aT(n/b)+f(n)  (其中a≥1,b>1)

主定理:

(1)如果存在常数ε>0有f(n)=O(n^(logb^a-ε)),则T(n)=Θ(n^(logb^a));

(2)若f(n)=Θ(n^(logb^a)),则T(n)=Θ(n^(logb^a)logn2^n);

(3)若对某个常数ε>0有f(n)=Ω(n^(logb^a)+ε),且对某个常数c<1和所有足够大的n有af(n/b)≤cf(n),则T(n)=Θ(f(n))。

其实这三条定理都是搞f(n)与logb^a的大小问题,但是相当蛋疼的是,我们可以发现,这个比大小很明显比的是多项式大小,所以就有可能看似这个比那个大但是在多项式意义上这个却不比那个大,这就相当坑爸爸了......

比如T(n)=2T(n/2)+nlog2^n,这个式子很明显就相当坑爹,虽然f(n)=nlog2^n渐进大于n^(logb^a)=n,但是却不是多项式大于。这就是我纠结了很长时间。后来找到了一种证明f(n)/n^(logb^a+ε)=nlog2^n/n^(1+ε)=n^(-ε)*log2^n,而对于任意正常数ε,没有可能使其等于1,这至少我还算可以接受。

算导上是那么说的,对于这个式子,对任意正常数ε,比值f(n)/n^(logb^a)=(nlog2^n)/n=log2^n,都渐进小于n^ε。这就让我比较难接受了,google告诉我者使用了洛必达法则的运算结果,目前我还没有成功证明这个证明方式是正确的,所以继续纠结中...

时间: 2024-10-26 17:38:28

胡搞主定理的相关文章

主定理 推导

本文首先讲解递归式的迭代求解方法,然后给出主定理的推导过程.(该推导过程是我为了好记主定理的推导过程,建议读者手动推导,当然如有错误,请交流指正) 本文是 算法导论课程的复习主定理部分: 1.递归式的迭代求解

主定理 - 算法导论摘录

主定理常用于计算递推式的时间复杂度.

主定理的证明及应用举例

主定理 主定理最早出现在<算法导论>中,提供了分治方法带来的递归表达式的渐近复杂度分析. 规模为n的问题通过分治,得到a个规模为n/b的问题,每次递归带来的额外计算为c(n^d) T(n) <= aT(n/b)+c(n^d) 那么就可以得到问题的复杂度为: T(n) = O(n^d log(n)), if a = b^d T(n) = O(n^d ), if a < b^d T(n) = O(n^logb(a))), if a > b^d 证明方法 本来使用主定理是可以免去画

主定理

(摘自<算法导论>) 主定理: 若T(n)由递归式T(n)=aT(n/b)+f(n)对非负整数定义,其中a≥1,b>1为常数,f(n)为一函数,则: \[T(n) = \left\{ \begin{array}{l}\Theta ({n^{{{\log }_b}a}}),\exists \varepsilon > 0,f(n) = O({n^{{{\log }_b}a - \varepsilon }})\\\Theta ({n^{{{\log }_b}a}}\lg n),f(n)

【20171105】主定理的基本解释整合

在算法分析中,主定理(英语:master theorem)提供了用 渐近符号 表示许多由 分治法 得到的递推关系式的方法. 此方法经由经典算法教科书<算法导论>而为人熟知.不过,并非所有递推关系式都可应用主定理.该定理的推广形式包括Akra-Bazzi定理. 内容 假设有递推关系式 , 其中为 问题规模, 为递推的子 问题数量, 为 每个子问题的规模(假设每个子问题的规模基本一样), 为 递推以外 进行的 计算工作. a≥1,b>1为常数,f(n) 为函数,T(n) 为非负整数. 则有以

【转】主定理

主定理 参考博客如标题 自己的傻b理解 对于我这种应付考试的人,可以直接代入几个特殊值... 只需要知道: 符号\(O\),读音殴,表示上界,小于等于,贴紧未知. 找好特殊值 对于简单的(如:O(n), 又如下面的例题3),自己推就行 博客原文如下 先介绍几个符号的含义. 符号\(Θ\),读音西塔,既是上界也是下界,等于,严格贴紧. 符号\(O\),读音殴,表示上界,小于等于,贴紧未知. 符号\(o\),读音也是殴,小于,不贴紧. 符号\(Ω\),读音偶眯嘎,表示下界,大于等于,贴紧未知. 符号

Gym 100917L Liesbeth and the String 规律&amp;&amp;胡搞

题目: Description standard input/outputStatements Little Liesbeth likes to play with strings. Initially she got a string of length n, consisting of letters 'a' only. Then Liesbeth performs next operations with the string: If the first letter of the str

NOJ——1624死胡同(胡搞模拟)

[1624] 死胡同 时间限制: 1000 ms 内存限制: 65535 K 问题描述 一个死胡同由排成一列的 n 个格子组成,编号从 1 到 n .实验室的“猪猪”一开始在1号格子,开始向前走,每步一格,并且每走 k 步会在当前的格子上打上记号(开始时,1号格子也有记号).由于这是死胡同,每当“猪猪”走到最左或者最右的格子时,它会改变方向.好奇的“猪猪”在想:如果我一直走,能否把所有格子都打上记号呢? 聪明的你一定知道答案! Hint1:如果 n=6,k=2,位置变化为:1 -> 3 ->

Lightoj 1010 - Knights in Chessboard (胡搞)

题目连接: http://www.lightoj.com/volume_showproblem.php?problem=1010 题目描述: 有一个n*m的棋盘,根据象棋中马走日字的规则,问此棋盘最多可以存放多少个马,并且任意两个马之间不会相互攻击. 解题思路: 从题目中给的棋盘可以看出,如果我们只把马放在白格子或者只把马放在黑格子的话都是合法的,但是是不是最优呢? 仔细考虑一下就可以得出: 当min(n, m) == 1的时候,把格子放满马也是没事的, 当min(n, m) == 2的时候,可