【转】主定理

主定理

参考博客如标题

自己的傻b理解

对于我这种应付考试的人,可以直接代入几个特殊值...
只需要知道:
符号\(O\),读音殴,表示上界,小于等于,贴紧未知。
找好特殊值
对于简单的(如:O(n), 又如下面的例题3),自己推就行

博客原文如下

先介绍几个符号的含义。

符号\(Θ\),读音西塔,既是上界也是下界,等于,严格贴紧。

符号\(O\),读音殴,表示上界,小于等于,贴紧未知。

符号\(o\),读音也是殴,小于,不贴紧。

符号\(Ω\),读音偶眯嘎,表示下界,大于等于,贴紧未知。

符号\(ω\),读音也是偶眯嘎,表示下界,大于,不贴紧。

上面的“贴紧”是我根据tight翻译过来的(不是很准确啊),大概就是是否严格等于的意思吧。

意思就是\(Θ\)是平均时间复杂度,\(O\)是最坏情况下的复杂度,\(Ω\)是最好情况下的复杂度。

假设我们有递推关系式:
\(T(n)=aT(n/b)+f(n)\)

其中,\(n\)为问题的规模、\(a\)为递推下子问题的数量,\(n/b\)为每个子问题的规模,\(f(n)\)为递推后做的额外的计算工作。

1.假设存在常数?>0 ,使得\(f(n)=O(n^{logb(a)??})\),则\(T(n)=Θ(n^{logba})\)。

具体意思是f(n)的上界是n的幂次,且\(logb(a)\)比这个幂次要大,则时间复杂度为这个n的\(logb(a)\)次。

例子:二叉树的遍历。\(T(n)=2T(n/2)+Θ(1)\)。其中\(a=2,b=2f(n)=1\),此时?=1。

\(T(n)=Θ(n)\)。

2.假设存在常数\(k≥0\),使得\(f(n)=Θ(n^{logba}log^kn)\),则\(T(n)=Θ(n^{logba} log^{k+1}n)\)。

具体意思是f(n)是n的\(logb(a)\)次,再乘以一个\(log\),则复杂度是\(f(n)\)的复杂度再乘以一个\(log\)。

例子:归并排序。\(T(n)=2T(n2)+Θ(n)\)。其中\(a=2,b=2,f(n)=n\),此时k=0。

\(T(n)=Θ(nlog2n)\)。

例子:二分搜索(折半搜索)。\(T(n)=T(n2)+Θ(1)\),其中\(a=1,b=2,f(n)=1\),此时k=0,则

\(T(n)=Θ(log2n)\)。

3.假设存在常数?>0,有\(f(n)=Ω(nlogb(a)+?)\),同时存在常数\(c<1\)以及充分大的n满足$ af(n/b)≤cf(n)$那么 \(T(n)=Θ(f(n))\)。

这个感觉没啥用啊。。。

【例题】

1【NOIP2017初赛】若某算法的计算时间表示为递推关系式:

\(T(N)=2T(N/2)+NlogN,T(1)=1\),则该算法的时间复杂度为______________________________________________________。

A.\(O(N)\) B.\(O(NlogN)\) C.\(O(NlogN)\) D.\(O(N^2)\)

【解析】套用情况2中的\(k=1\)的情况,则\(T(n)=Θ(NlogN)\),选C

2【NOIP2016初赛】若某算法的计算时间表示为递推关系式:

\(T(N)=2T(N4)+N??√,T(1)=1\),则该算法的时间复杂度为______________________________________________________。

A.\(O(N)\) B.\(O(√N)\) C.\(O(√N log2N)\) D.\(O(N^2)\)?

【解析】套用情况2中的k=0的情况,则$T(n)=Θ(sqrt(N)log2 N) $,选C

3【NOIP2015初赛】某算法的计算时间表示为递推关系式:

\(T(N)=T(N?1)+N\) ,T(0)=1 。则该算法的时间复杂度为______________________________________________________。

A.\(O(log22N)\) B.\(O(Nlog2N)\) C.\(O(N)\) D.\(O(N^2)\)

【解析】难道这个就要用主定理了?容易推导出\(T(N)=T(0)+1+...+n=1+N?(N+1)2\) ,则时间复杂度为$O(N^2) $,选D

【总结】

NOIP初赛考察了3年的时间复杂度分析,其中两年用到了主定理。其实你不会主定理也没事儿,只要能找几个特殊值带入,并根据符号O的意义排除选项即可。

原文地址:https://www.cnblogs.com/tyner/p/11568452.html

时间: 2024-10-02 12:04:53

【转】主定理的相关文章

主定理 推导

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

主定理 - 算法导论摘录

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

胡搞主定理

今天看算导,看到主定理这一块各种渐进.多项式大于小于什么的让我拙计,现在分享一下. 所谓主定理,就是用来解递归方程的一种方法,此方法可以用来求解大多数递归方程. 设递归方程为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的问题通过分治,得到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) 为非负整数. 则有以

master theorem主定理

其中 为问题规模, 为递推的子问题数量, 为每个子问题的规模(假设每个子问题的规模基本一样) O(n^d)为除了递归以外的其他计算量. 例子:http://www.cnblogs.com/SelaSelah/archive/2012/06/04/2535271.html

时间复杂度计算的主方法

主方法要比那什么代入法好很多啊,代入法就是先凭经验猜一个较好的界,然后再代入证明,运气好猜对了,证明却不对,运气不好都猜不对. 先介绍下主定理,主定理有条件限制,先看看主定理给出递归式: T(n) = aT(n/b) + f(n);(a ≥ 1,b > 1) 其中 a 是子问题个数,n/b是每个子问题的规模(n/b不是总是整数,所以应将其看作[n/b](上取整或下取整)),f(n)是一个函数(分和治的总代价). 好了,主方法的介绍就暂时到此为止了,为了做为复习和加固记忆所以把书上的手打了一遍,过

算法分析与设计复习

算法分析与设计复习 2016年初,研一上学期期末考试前,复习并总结算法分析与设计科目的内容.复习过程参照<算法导论>中文第2版,同时参照PPT,章节划分根据PPT内容 概要: 第一章 概述 第二章 插入排序&分治策略 第三章 复杂度分析 第四章 堆与堆排序 第五章 快速排序 第六章 线性时间排序 第一章 概述 算法的应用范围 算法在诸如生物等诸多领域有其应用 算法的意义 算法在很多情况下让不可能完成的事情变成了可能,让处理的很慢的过程变快. 一个铺垫 一串不全为0的数,怎么取能拿到一段