复杂度计算 master 公式详解

2023-08-22 11:42:47 顶置3

前言

推了半个小时的式子,我感觉我已经彻底的理解了,所以前来写一篇复杂度 master 公式计算的结论和证明。

master 公式

可以解决的问题——给出递归的复杂度公式:

{T(1)=1T(n)=aT(nb)+f(n)f(n)=nd

求递归 T(n) 的复杂度。

结论:

T(n)={O(ndlogbn)logba=dO(nd)logba<dO(nlogba)logba>d

证明:

T(n)=aT(nb)+f(n)=a(aT(nb2)+(nb)d)+nd=a2T(nb2)+nd(1+abd)

用相同的方法将 T(n) 展开 m 次,可得:

T(n)=amT(nbm)+nd(1+abd+(abd)2++(abd)m1)

展开到最后,显然 nbm 可以取到 1,那么 m=logbn

那么:

T(n)=alogbnT(1)+nd(1+abd+(abd)2++(abd)1+logbn)

abd=1 时,此时 a=bd,d=logba,代入可得:

T(n)=alogbn+nlogbalogbn=nlogba+nlogbalogbn=nd(1+logbn)

去掉常数项可得当 abd=1 时,T(n)=ndlogbn

abd1 时,我们令 S=1+abd+(abd)2++(abd)1+logbn

S=1+abd+(abd)2++(abd)1+logbn

abdS=abd+(abd)2++(abd)logbn

(abd1)S=(abd)logbn1

S=(abd)logbn1abd1

T(n)=alogbn+nd(abd)logbn1abd1=nlogba+nlogbandabd1=abdnlogbandabd1

abd<1logba<d 时,显然 nd>abdnlogba,所以近似看作 T(n)=nd=f(n),否则 T(n)=nlogba

综上

T(n)={O(ndlogbn)logba=dO(nd)logba<dO(nlogba)logba>d

本文作者:NBestの思潮

本文链接:https://www.cnblogs.com/NBest/p/17687045.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   NBest  阅读(74)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起