电子学会五级-分治时间复杂度-主定理

主定理是分治算法分析中非常重要的定理
如,我们要处理一个 规模为 n 的问题通过分治,得到 a 个规模为 \(\frac{n}{b}\) 的问题,分解子问题和合并子问题的时间是 f(n):

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

在上面这个式子里,我们得要求 \(a \geqslant 1, b> 1\) (如果 b=1 时,递推无意义),f(n) 是渐进意义上的正数。

回顾一下,a 和 b 的含义:

a 个子问题,即 a 是原问题分为子问题的个数;
每个子问题的规模是 \(\frac{n}{b}\)
分治算法共三部分,分治合,而 f(n) 就是分+合的时间

\(T(n)=a*T(\frac{n}{b}) + O(n^d)\) 对于a>0,b>1,d>=0
则有

\[ T(n)=\begin{cases} O(n^d) & d>log_{b}{a} \\ O(n^d*log_{2}{n}) & d=log_{b}{a} \\ O(n^{log_{b}{a}}) & d<log_{b}{a} & 对于充分大的n 需要满足 a * f(n/b)<=c*f(n) 需要 c<1 \end{cases}\]

应用距离
1.二分查找(Binary search):
T(n)=T(n/2)+1
a=1 b=2
因为
\(1=n^0 且 n^{log_{2}{1}}=n^0\)
所以适合情况2 时间复杂度为
\(n^d*log_{2}{n}=log_{2}{n}\)

2.归并排序(Merge sort):
T(n)=2T(n/2)+n
a=2 b=2
\(log_{2}{2}=1 且~~ f(n)=n=n^1\)
所以适合情况2 时间复杂度为
\(n*log_{2}{n}\)

3.二叉树遍历(Binary tree traversal):
T(n)=2T(n/2)+1
a=2 b=2
\(log_{2}{2}=1 且~~ f(n)=1=n^0\)
所以适合情况3 时间复杂度为
\(n^{log_{b}{a}} = n^{log_{2}{2}}=n\)

4.T(n)=3T(n/4)+nlogn
a=3 b=4
\(log_{4}{3}<1 且~~ f(n)=n^1*logn\)
所以适合情况3 主要看f(n)的时间复杂度
所以时间复杂度为n
logn

https://blog.csdn.net/qq_41739364/article/details/101224786

https://blog.csdn.net/qq_37375427/article/details/100865396

https://blog.csdn.net/weixin_43560913/article/details/119616265



不适用主定理情况
n不等比例缩小 而是逐渐缩小
1.T(n)=T(n-1)+n 时间复杂度 \(O(n^2)\)
推导:
T(n)
=T(n-1)+n
=T(n-2)+(n-1)+n
=T(n-3)+(n-2)+(n-1)+n

=T(0)+1+2+…+(n-2)+(n-1)+n
=1+1+2+…+(n-2)+(n-1)+n
=1+(n+1)*n/2

2.T(n)=T(n-1)+1/n 时间复杂度 \(O(logn)\)
推导:
T(n) = T(n-1)+1/n
= T(n-2)+1/(n-1)+ 1/n
= T(n-3)+1/(n-2) +1/(n-1)+ 1/n
……
= T(2)+1+1/2+… +1/(n-1)+ 1/n
= 1+1+1/2+… +1/(n-1)+ 1/n
=O(logn)
当n趋于无穷大时调和级数有:(1 + 1/2 + 1/ 3 + 1/ 4.) - lnn
所以时间复杂度为对数级

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

不满足 af(n/b)<=cf(n)
f(n/2)=n/2=n<=cn --n/2到n放大,c不可能小于1

可以使用代入法计算 T(n)=n+n/2+n/4+n/8+...1
根据等比数列求和:
\(S(n)=a1*(1-q^n)/(1-q)=1*(1-2^{log^n})/(1-2)=2^{log^n}-1=2^{log^n}=n\)

4.T(n)=2T(n/2)+n*logn
a=2 b=2
\(log_{2}{2}=1 且~~ f(n)=n^1*logn\)

不满足 af(n/b)<=cf(n)
\(2*(n/2 * log^{n/2})=n*log^{n/2}=n*log^n <=c*n*log^n ~所以c=1 不满足c<1\)

所以2T(n/2)和nlogn多项式属于同阶
所以T(n)的时间复杂度为:每层规模n
logn再乘以递归深度logn
所以T(n)的时间复杂度为:nlognlogn

https://www.zhihu.com/question/63075755


主定理参考
https://blog.csdn.net/weixin_47268276/article/details/109706486

https://zhuanlan.zhihu.com/p/267890781

https://view.inews.qq.com/a/20220903A07TYZ00

posted @ 2022-06-25 17:38  new-code  阅读(464)  评论(0编辑  收藏  举报