算法导论:2 渐进符号、递归及解法

1 渐进符号

1.1 O符号

f(n)=O(g(n))

存在常数c>0n_{0}>0,对所有的n\geqslant n_{0},满足0\leqslant f(n)\leqslant cg(n) 。f(n)的复杂度最多与g(n)一个数量级,即小于等于。

例:2n^{2}=O(n^{3})


出现在公式中的集合符号(如O)表示集合中的某一个函数,而不是集合整体。

例1:f(n)=n^{3}+O(n^{2})
直观理解:表示了一个误差界限,即f(n)主要是由n^{3}构成的,但也有一些O(n^{2})的低阶项
实际含义:存在一个函数h(n)\in O(n^{2}),使得f(n)=n^{3}+h(n)

例2:n^{2}+O(n)=O(n^{2})
直观理解:“=”应该理解成“是”,而不是“等于”。等号左边隐含任意量词,等号右边隐含存在量词,
实际含义:对于任意函数f(n)\in O(n),总存在函数h(n)\in O(n^{2}),使得n^{2}+f(n)=h(n)
用途: 如果有很长的“等式链”,第一个就等于最后一个(只能从左到右,因为O是非对称的)

 

1.2 \Omega 符号

  f(n)=\Omega (g(n)) 

 存在常数c>0n_{0}>0,对所有的n\geqslant n_{0},满足0\leqslant ng(n)\leqslant f(n)成立。f(n)的复杂度最少与g(n)一个数量级,即大于等于。

例:\sqrt{n}=\Omega (logn)

 

1.3 \Theta符号

\Theta (g(n))=\Omega (g(n))\bigcap O(g(n))

f(n)=\Theta (g(n)),表示f(n)的复杂度既大于等于g(n)的复杂度,又小于等于g(n)的复杂度,即于g(n)的复杂度相当。

例:n^{2}=\Theta (n^{2}),     n^{2}+O(n)=\Theta (n^{2})

 

1.4 o\omega符号

更“严格的”O\Omega,不等式需要对所有的c成立,而不仅仅是一个特定的c

类比

 

2 求解递归的三种方法

2.1 代换法


第一步:猜答案Guess the form of the solution。代换法在大多数情况下是有效的,但是不幸的是第一步需是猜答案。你不需要完全猜出来,你可以不需要知道常数系数确切是多少,仅需要猜它的形式。

第二步:通过数学归纳法验证第一步才出来的form是否满足条件。

第三步:也是第二步的必然结果,如果猜对了那么很容易解出常数系数。

下图所示是如何利用代换法解一个递归式:

证明  T(n)=O(n^{3})

那么,上图中证明了T(n)小于等于一个常数乘以n^{3}。图中所解出的答案就是上界,不过不是严格的上界,事实上我们认为n^{2}也成立。所以这并不能证明递归式的答案就是n^{3},这只是表示至多是O(n^{3})

证明  T(n)=O(n^{2})

改进归纳假设

考虑低阶项!!

 

2.2 递归树法

将抽象递归表达式具体化的最佳图形表示就是递归树。该模型以输入规模为n开始,一层层地分解,直到输入规模变为1为止。而这个时候的解决方案已经是琐细的了。图3-5为表达式T(n) = T(n /4) + T(n / 2)+ n2 的递归树。


 各棵树的叶子节点数不一样,因为递归速度不一样。如果按n的子节点为两个n/2,叶子节点数为n,该例子中n的节点为n/4和n/2, 叶子节点数肯定小于n。

T(n)=n^{2}(1+\frac{5}{16}+(\frac{5}{16})^{2}+...)=O(n^{2})
 

2.3 主定理法(Master Method) 

每个子问题的规模相同,a个相同的子问题。

T(n)=aT(\frac{n}{b})+f(n)     where   a\geqslant 1, b\geqslant 1f(n) 是不参与递归的复杂度函数

判断n^{log_{b}a}f(n)的大小关系(n^{log_{b}a}是递归树叶子节点的数量):

  1. 若对某个常数\epsilon >0, 有f(n)=O(n^{log_{b}a-\epsilon} ),  则T(n)=\Theta (n^{log_{b}a})
  2. f(n)=\Theta (n^{log_{b}a} ), 则T(n)=\Theta (n^{log_{b}a}logn)
  3. 若对某个常数\epsilon >0, 有f(n)=\Omega (n^{log_{b}a+\epsilon} ),且对某个常数c<1和所有足够大的naf(n/b)\leqslant cf(n),T(n)=\Theta (f(n))

分别举出了主定理方法的三个应用场景的例子以及一个主定理方法不适用的例子。

 

 

证明主定理:

树高度为h=log_{b}n

 叶子节点数a^{h}=a^{log_{b}n}=n^{log_{b}a}

case 3 : 如果af(n/b)\leqslant cf(n), 代价由上到下呈几何级数降低,最顶层的代价占主导地位,所以,T(n)=\Theta (f(n))

case1:   代价由上到下升高,最底层的代价占主导地位,所以,T(n)=\Theta (n^{log_{b}a})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值