编辑
2024-12-27
算法
0
请注意,本文编写于 658 天前,最后修改于 658 天前,其中某些信息可能已经过时。

目录

主定理
简化的主定理

主定理

主定理是用于计算如下递推形式的时间复杂度

T(n)=aT(nb)+f(n)T(n)=aT\left(\dfrac nb\right)+f(n)

根据f(n)f(n)与 log⁡ba\log_ba 的大小关系分为四种情况

f(n)>=<?nlog⁡baf(n)\stackrel{?}{>=<}n^{\log_ba}
  1. f(n)=O(nlog⁡ba−ϵ)f(n)=O\left(n^{\log_ba-\epsilon}\right) 可以理解为 f(n)<nlog⁡baf(n)<n^{\log_ba}, 则有
T(n)=Θ(nlog⁡ba)T(n)=\Theta\left(n^{\log_ba}\right)
  1. f(n)=Θ(nlog⁡ba)f(n)=\Theta\left(n^{\log_ba}\right) 可以理解为 f(n)=nlog⁡baf(n)=n^{\log_ba}, 则有
T(n)=Θ(nlog⁡balog⁡n)T(n)=\Theta\left(n^{\log_ba}\log n\right)
  1. f(n)=Ω(nlog⁡ba+ϵ)f(n)=\Omega\left(n^{\log_ba+\epsilon}\right) 可以理解为 f(n)>nlog⁡baf(n)>n^{\log_ba}, 则有
T(n)=f(n)T(n)=f(n)
  1. 第四种情形是特殊的, 当f(n)=Ω(nlog⁡balog⁡kn)f(n)=\Omega\left(n^{\log_ba}\log^kn\right) 即 f(n)=nlog⁡balog⁡knf(n)=n^{\log_ba}\log^kn时
T(n)=Θ(nlog⁡balog⁡k+1n)T(n)=\Theta\left(n^{\log_ba}\log^{k+1}n\right)

简化的主定理

如果取f(n)f(n)是多项式复杂度的, 即 f(n)=O(nd)f(n)=O(n^d), 递推式即

T(n)=aT(nb)+O(nd)T(n)=aT\left(\dfrac nb\right)+O(n^d)

那么就能讲主定理简化为

  1. d<log⁡bad<\log_ba
T(n)=O(nlog⁡ba)T(n)=O\left(n^{\log_ba}\right)
  1. d=log⁡bad=\log_ba
T(n)=O(ndlog⁡n)T(n)=O(n^d\log n)
  1. d>log⁡bad>\log_b a
T(n)=O(nd)T(n)=O(n^d)

本文作者:GBwater

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!