算法导论:用主定理求解递归式 计算算法复杂度

举报
楚楚冻人玥玥仙女 发表于 2021/11/19 03:25:39 2021/11/19
【摘要】 主定理公式: T ( n ...

主定理公式: T ( n ) = a T ( n / b ) + f ( n ) T(n) = aT(n/b) + f(n) T(n)=aT(n/b)+f(n)

算法导论书上将算法复杂度的求解方法讲的很清楚,就分三种情况:

  1. O ( n l o g b a ) > O ( f ( n ) ) O(n^{log_{b}^{a}}) > O(f(n)) O(nlogba)>O(f(n))的时候, T ( O ) = O ( n l o g b a ) T(O)=O(n^{log_{b}^{a}}) T(O)=O(nlogba)
  2. O ( n l o g b a ) = O ( f ( n ) ) O(n^{log_{b}^{a}}) = O(f(n)) O(nlogba)=O(f(n))的时候, T ( O ) = O ( n l o g b a l g n ) T(O)=O(n^{log_{b}^{a}} lg n) T(O)=O(nlogbalgn)
  3. O ( n l o g b a ) &lt; O ( f ( n ) ) O(n^{log_{b}^{a}}) &lt; O(f(n)) O(nlogba)<O(f(n))的时候, T ( O ) = O ( f ( n ) ) T(O)=O(f(n)) T(O)=O(f(n))

显然, T ( n ) T(n) T(n)将复杂度分为了 a T ( n / b ) aT(n/b) aT(n/b)的复杂度 O ( n l o g b a ) O(n^{log_{b}^{a}}) O(nlogba),和 f ( n ) f(n) f(n)的复杂度 O ( f ( n ) ) O(f(n)) O(f(n))两部分,两者谁大则取谁的值,如果相同,则为 O ( n l o g b a l g n ) O(n^{log_{b}^{a}} lg n) O(nlogbalgn)


练习:

(1). 求: T ( n ) = 2 T ( n / 4 ) + 1 T(n) = 2 T(n/4) + 1 T(n)=2T(n/4)+1

解: a = 2 , b = 4 , a = 2, b = 4, a=2,b=4, 所以 O ( n l o g b a ) O(n^{log_{b}^{a}}) O(nlogba)的值为 O ( n ) O(\sqrt{n}) O(n ) f ( n ) f(n) f(n)的值为 O ( 1 ) O(1) O(1), 所以 O ( n l o g b a ) &gt; O ( f ( n ) ) O(n^{log_{b}^{a}}) &gt; O(f(n)) O(nlogba)>O(f(n)),则 T ( O ) = O ( n ) T(O)=O(\sqrt{n}) T(O)=O(n )


(2). 求: T ( n ) = 2 T ( n / 4 ) + n T(n) = 2 T(n/4) + \sqrt{n} T(n)=2T(n/4)+n

解: a = 2 , b = 4 , a = 2, b = 4, a=2,b=4, 所以 O ( n l o g b a ) O(n^{log_{b}^{a}}) O(nlogba)的值为 O ( n ) O(\sqrt{n}) O(n ) f ( n ) f(n) f(n)的值为 O ( n ) O(\sqrt{n}) O(n ), 所以 O ( n l o g b a ) = O ( f ( n ) ) O(n^{log_{b}^{a}}) = O(f(n)) O(nlogba)=O(f(n)),则 T ( O ) = O ( n l g n ) T(O)=O(\sqrt{n} lgn) T(O)=O(n lgn)


(3). 求: T ( n ) = 2 T ( n / 4 ) + n T(n) = 2 T(n/4) + n T(n)=2T(n/4)+n

解: a = 2 , b = 4 , a = 2, b = 4, a=2,b=4, 所以 O ( n l o g b a ) O(n^{log_{b}^{a}}) O(nlogba)的值为 O ( n ) O(\sqrt{n}) O(n ) f ( n ) f(n) f(n)的值为 O ( n ) O(n) O(n), 所以 O ( n l o g b a ) &lt; O ( f ( n ) ) O(n^{log_{b}^{a}}) &lt; O(f(n)) O(nlogba)<O(f(n)),则 T ( O ) = O ( n ) T(O)=O(n) T(O)=O(n)


(4). 求: T ( n ) = 2 T ( n / 4 ) + n 2 T(n) = 2 T(n/4) + n^2 T(n)=2T(n/4)+n2

解: a = 2 , b = 4 , a = 2, b = 4, a=2,b=4, 所以 O ( n l o g b a ) O(n^{log_{b}^{a}}) O(nlogba)的值为 O ( n ) O(\sqrt{n}) O(n ) f ( n ) f(n) f(n)的值为 O ( n 2 ) O(n^2) O(n2), 所以 O ( n l o g b a ) &lt; O ( f ( n ) ) O(n^{log_{b}^{a}}) &lt; O(f(n)) O(nlogba)<O(f(n)),则 T ( O ) = O ( n 2 ) T(O)=O(n^2) T(O)=O(n2)


文章来源: blog.csdn.net,作者:爱玲姐姐,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/jal517486222/article/details/82805401

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。