主定理狗都不学
  • 板块学术版
  • 楼主WYXkkZzz Zzz
  • 当前回复37
  • 已保存回复37
  • 发布时间2022/9/8 20:05
  • 上次更新2023/10/27 12:15:56
查看原帖
主定理狗都不学
130151
WYXkkZzz Zzz楼主2022/9/8 20:05

略标题党。借用了前一个的标题。

解决递归式时间复杂度题目的老方法

验证仍然是带有一点不靠谱的,实际上可以采用更加靠谱和直接的办法:

暴力递归

以下是使用暴力递归法来解前一个的三个例子:

例 1

T(n)=4nT(n)+n=16n3/4T(n1/4)+4n+n==n(1+4++4log2log2n)=O(nlog2n)\begin{aligned}T(n)&=4\sqrt nT(\sqrt n)+n\\&=16n^{3/4}T(n^{1/4})+4n+n\\&=\cdots\\&=n(1+4+\cdots+4^{\log_2\log_2 n})\\&=O(n\log^2 n)\end{aligned}

众所周知,把 nn 开根到 11 为止的次数是 log2log2n\log_2\log_2 n

例 2

T(n)=T(n/2)+nlogn=T(n/4)+nlogn+(n/2)log(n/2)==nlogn+(n/2)log(n/2)+2nlogn\begin{aligned}T(n)&=T(n/2)+n\log n\\&=T(n/4)+n\log n+(n/2)\log(n/2)\\&=\cdots\\&=n\log n+(n/2)\log(n/2)+\cdots\\&\le 2n\log n\end{aligned}

log(n/2k)\log(n/2^k) 全部放成 logn\log n,然后等比数列求和。

例 3

T(n)=3T(n/2)+4T(n/4)+n\begin{aligned}T(n)&=3T(n/2)+4T(n/4)+n\end{aligned}

不妨设 n=2kn=2^{k},记 T(2k)=fkT(2^k)=f_k,那么 fk=3fk1+4fk2+2kf_k=3f_{k-1}+4f_{k-2}+2^k

gk=fk+2k+1/3g_k=f_k+2^{k+1}/3,那么 gk=3gk1+4gk2g_k=3g_{k-1}+4g_{k-2}

容易看出 gk=a4k+b(1)kg_k=a4^k+b(-1)^k(高中数学竞赛基础内容,瞪眼也能看出来)

所以 T(2k)=a4k+b(1)k2k+1/3=O(4k)T(2^k)=a4^k+b(-1)^k-2^{k+1}/3=O(4^k),所以 T(n)=O(n2)T(n)=O(n^2)


虽然其实是非常正常和直接的思路,但是好像很多人不会这种东西。

计算量不会很大的。

2022/9/8 20:05
加载中...