【算法设计与分析】12 主定理及其应用

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_37375427/article/details/100865396

主定理是一个非常有用的定理,前面我们学习的所有知识都可以用主定理来求解,而不必要使用复杂的计算方法来求解

1. 主定理

1.1 主定理的应用背景

求解递推方程:

T(n) = a T(n/b) + f(n)

其中:

  • a: 归约后的子问题个数
  • n/b:归约后子问题的规模
  • f(n):归约过程及组合子问题的解的工作量

例如前面的文章我们曾求解过:

  • 二分检索: T(n) = T(n/2)+1
  • 二分归并排序: T(n) =2T(n/2)+n-1

现在想要求解这些式子,不再像以前那样采用各种技巧进行求解,可以直接通过主定理进行求解:

1.2 主定理内容

定理:设a >= 1, b>1为常数, f(n)为函数, T(n) 为非负整数,且T(n)=aT(n/b)+f(n), 则:

在这里插入图片描述

主定理的证明过程略

2. 主定理的应用

2.1 求解递推方程 例1

T(n) = 9T(n/3) + n

扫描二维码关注公众号,回复: 7658065 查看本文章

上述递推方程中:

a = 9, b = 3,f (n) = n,所以:
在这里插入图片描述
相当于主定理的case1,其中 ξ \xi =1.
根据定理得到 T(n) = Θ \Theta (n2)

2.2 求解递推方程 例2

T(n) = T(2n/3) + 1

上述递推方程中的

a = 1, b = 3/2, f(n) = 1,

n l o g 3 / 2 1 = n 0 = 1 n^{log_{3/2}1} = n_0 = 1

相当于主定理的Case2 .

根据定理得到T(n) = Θ \Theta ( log n)

2.3 求解递推方程 例3

求解递推方程

T(n) = 3T(n/4) + nlogn

上述递推方程中的

a=3, b=4, f(n)=nlogn

所以:在这里插入图片描述
取 = 0.2 即可.

ξ \xi =0.2即可

条件验证:

在这里插入图片描述

3. 总结

对于之前的二分搜索则对应主定理的case2,二分归并排序则也对应主定理的case2,可以直接利用主定理求解。

但是也有很多时候不能使用主定理,如果不能使用,就使用递归树或者迭代法等方法求解。

猜你喜欢

转载自blog.csdn.net/qq_37375427/article/details/100865396