主定理(一般式)

主定理(Master Theorem)是用于分析递归算法时间复杂度的一个重要工具。它适用于形式化定义的一类递归关系,通常采用分治策略解决问题的情况。

主定理简化版的局限

主定理简化版的三种情况:

  1. I F IF IF f ( n ) = O ( n l o g b ( a − ε ) ) f(n) = O(n^ {log_b(a - ε)}) f(n)=O(nlogb(aε)),and ε > 0 ε > 0 ε>0,Then T ( n ) = Θ ( n l o g b ( a ) ) T(n) = Θ(n^{log_b(a)}) T(n)=Θ(nlogb(a))
  2. I F IF IF f ( n ) = Θ ( n l o g b ( a ) ⋅ l o g k n ) f(n) = Θ(n^{log_b(a)} ·log^k n) f(n)=Θ(nlogb(a)logkn),and k ≥ 0 k ≥ 0 k0,Then T ( n ) = Θ ( n l o g b ( a ) ⋅ l o g k + 1 n ) T(n) = Θ(n^{log_b(a)} · log^{k+1} n) T(n)=Θ(nlogb(a)logk+1n)
  3. I F IF IF f ( n ) = Ω ( n l o g b ( a + ε ) ) f(n) = Ω(n^{log_b(a + ε)}) f(n)=Ω(nlogb(a+ε)),and ε > 0 ε > 0 ε>0 a ⋅ f ( n b ) ≤ c ⋅ f ( n ) a · f(\frac{n}{b}) ≤ c · f(n) af(bn)cf(n) 对于某个常数 c < 1 c < 1 c<1 和所有足够大的 n n n 成立,Then T ( n ) = Θ ( f ( n ) ) T(n) = Θ(f(n)) T(n)=Θ(f(n))

简化形式具有一定的限制条件,比如形式上必须是: T ( n ) = a ⋅ T ( n b ) + f ( n ) T(n)=a·T(\frac{n}{b})+f(n) T(n)=aT(bn)+f(n)

并且 f ( n ) = n c f(n) = n^{c} f(n)=nc

三个反例:

  1. 子问题数量不是常数

T ( n ) = n ⋅ T ( n 2 ) + n 2 T(n)=n \cdot T(\frac{n}{2})+n^{2} T(n)=nT(2n)+n2

  1. 子问题数量小于1

T ( n ) = 1 2 T ( n 2 ) + n 2 T(n)=\frac{1}{2}T(\frac{n}{2})+n^{2} T(n)=21T(2n)+n2

  1. 分解问题和合并解的时间不是 n c n^{c} nc

T ( n ) = 2 T ( n 2 ) + n l o g n T(n)=2T(\frac{n}{2})+nlogn T(n)=2T(2n)+nlogn


主定理一般形式

T ( n ) = a ⋅ T ( n b ) + f ( n ) , a > 0 , b > 1 T(n)=a·T(\frac{n}{b})+f(n),a>0,b>1 T(n)=aT(bn)+f(n),a>0,b>1

  1. I F IF IF ∃ ε > 0 \exists ε > 0 ε>0 使得 f ( n ) = O ( n l o g b ( a − ε ) ) f(n) = O(n^ {log_b(a - ε)}) f(n)=O(nlogb(aε)) ,Then T ( n ) = Θ ( n l o g b ( a ) ) T(n) = Θ(n^{log_b(a)}) T(n)=Θ(nlogb(a))
  2. I F IF IF ∃ k ≥ 0 \exists k ≥ 0 k0 使得 f ( n ) = Θ ( n l o g b ( a ) ⋅ l o g k n ) f(n) = Θ(n^{log_b(a)} ·log^k n) f(n)=Θ(nlogb(a)logkn),Then T ( n ) = Θ ( n l o g b ( a ) ⋅ l o g k + 1 n ) T(n) = Θ(n^{log_b(a)} · log^{k+1} n) T(n)=Θ(nlogb(a)logk+1n)
  3. I F IF IF ∃ ε > 0 \exists ε > 0 ε>0 使得 f ( n ) = Ω ( n l o g b ( a + ε ) ) f(n) = Ω(n^{log_b(a + ε)}) f(n)=Ω(nlogb(a+ε))
    且对于某个常数 c < 1 c < 1 c<1 和所有足够大的 n n n a ⋅ f ( n b ) ≤ c ⋅ f ( n ) a · f(\frac{n}{b}) ≤ c · f(n) af(bn)cf(n) ,Then T ( n ) = Θ ( f ( n ) ) T(n) = Θ(f(n)) T(n)=Θ(f(n))

主要考虑 函数 n l o g b a n^{log_{b}{a}} nlogba f ( n ) f(n) f(n) 的增长率关系

情况1: n l o g b a n^{log_{b}{a}} nlogba f ( n ) f(n) f(n) 增长的快

T ( n ) = 9 T ( n 3 ) + n T(n)=9T(\frac{n}{3})+n T(n)=9T(3n)+n

  • n l o g b a = n 2 n^{log_{b}{a}}=n^{2} nlogba=n2,
  • f ( n ) = n = O ( n 2 − ϵ ) , ϵ ≤ 1 f(n)=n=O(n^{2-\epsilon }),\epsilon \le1 f(n)=n=O(n2ϵ),ϵ1
  • ⇒ T ( n ) = O ( n 2 ) \Rightarrow T(n)=O(n^{2}) T(n)=O(n2)

情况2: n l o g b a n^{log_{b}{a}} nlogba f ( n ) f(n) f(n) 增长率类似

T ( n ) = T ( 2 n 3 ) + 1 T(n)=T(\frac{2n}{3})+1 T(n)=T(32n)+1

  • n l o g b a = n l o g 3 / 2 1 = n 0 = 1 n^{log_{b}{a}}=n^{log_{3/2}1}=n^{0}=1 nlogba=nlog3/21=n0=1,
  • f ( n ) = 1 = Θ ( n l o g b a l o g 0 n ) f(n)=1=Θ(n^{log_{b}{a}}log^{0}n) f(n)=1=Θ(nlogbalog0n)
  • ⇒ T ( n ) = O ( l o g n ) \Rightarrow T(n)=O(log n) T(n)=O(logn)

情况3: n l o g b a n^{log_{b}{a}} nlogba f ( n ) f(n) f(n) 增长的慢

  • f ( n ) f(n) f(n) n l o g b a n^{log_{b}{a}} nlogba 增长的更快,至少要快 Θ ( n ϵ ) Θ(n^{\epsilon}) Θ(nϵ) 倍,且 a f ( n b ) ≤ c f ( n ) af(\frac{n}{b}) \le cf(n) af(bn)cf(n)

T ( n ) = 3 T ( n 4 ) + n l o g n T(n)=3T(\frac{n}{4})+nlogn T(n)=3T(4n)+nlogn

  • n l o g b a = n l o g 4 3 = n 0.793 n^{log_{b}{a}}=n^{log_{4}3=n^{0.793}} nlogba=nlog43=n0.793,
  • f ( n ) = n l o g n = Ω ( n l o g 4 3 + ϵ ) , ϵ ≤ 0.207 f(n)=nlogn=Ω(n^{log_{4}3+\epsilon }),\epsilon \le0.207 f(n)=nlogn=Ω(nlog43+ϵ),ϵ0.207
  • a f ( n b ) = 3 ( n 4 ) l o g ( n 4 ) ≤ 3 4 n l o g n = c f ( n ) , c = 3 4 af(\frac{n}{b})=3(\frac{n}{4})log(\frac{n}{4}) \le \frac{3}{4}nlogn=cf(n),c=\frac{3}{4} af(bn)=3(4n)log(4n)43nlogn=cf(n),c=43
  • ⇒ T ( n ) = O ( n l o g n ) \Rightarrow T(n)=O(nlogn) T(n)=O(nlogn)

主定理不适用的情况

  1. n l o g b a n^{log_{b}{a}} nlogba f ( n ) f(n) f(n) 的增长率不可比
  2. n l o g b a n^{log_{b}{a}} nlogba f ( n ) f(n) f(n) 增长的快,但没有快 O ( n ϵ ) O(n^{\epsilon}) O(nϵ)
  3. n l o g b a n^{log_{b}{a}} nlogba f ( n ) f(n) f(n) 增长的慢,但没有慢 O ( n ϵ ) O(n^{\epsilon}) O(nϵ)

### 定理第三种情况的分析 定理提供了三种常见的情况来帮助我们计算分治算法的时间复杂度。其中,第三种情况适用于当子问题合并的成本 \( f(n) \)导地位的情形。 #### 定义与条件 对于递归关系 \( T(n) = a \cdot T\left(\frac{n}{b}\right) + f(n) \),如果满足以下条件,则可以应用定理的第三种情况: 1. 存在一个常数 \( \epsilon > 0 \),使得 \( f(n) = \Omega(n^{\log_b{a}+\epsilon}) \)[^1]。 2. 对于某个常数 \( c < 1 \),存在足够的大 \( n \),使不等 \( af\left(\frac{n}{b}\right) \leq cf(n) \) 成立[^2]。 在此条件下,时间复杂度为 \( T(n) = \Theta(f(n)) \)[^3]。 --- #### 条件解释 - **第一个条件**表明函数 \( f(n) \) 的增长速度必须显著高于由子问题贡献的增长率 \( n^{\log_b{a}} \)。这意味着合并子问题的结果所花费的时间远超过解决子问题本身所需的时间。 - **第二个条件**是一个技术性的约束,确保递归树每一层的工作量不会随着深度增加而无限增大。换句话说,它保证了大部分工作集中在递归的第一层完成。 --- #### 应用实例 考虑一个具体的例子:假设某算法有如下递归表达: \[ T(n) = 8T\left(\frac{n}{2}\right) + n^3 \] 这里参数分别为 \( a = 8, b = 2, f(n) = n^3 \)。因此, \[ n^{\log_b{a}} = n^{\log_2{8}} = n^3 \][^1]。 此时,\( f(n) = n^3 \) 和 \( n^{\log_b{a}} = n^3 \) 增长速率相同,无法直接套用定理的第三种情况。但如果我们将 \( f(n) \) 改为 \( n^{3+\epsilon} \)(例如 \( n^4 \)),则可以适用此情况。 最终得出结论:在这种情况下,时间复杂度为 \( T(n) = \Theta(f(n)) = \Theta(n^4) \)。 --- ```python def example_recursive_function(n): if n <= 1: return 1 else: total_cost = 0 for _ in range(8): # 'a' subproblems total_cost += example_recursive_function(n // 2) additional_work = n**4 # Additional work per level of recursion return total_cost + additional_work ``` 上述代码展示了如何通过递归来实现这一逻辑结构,并体现了额外工作的加入方。 --- #### 总结 定理的第三种情况要用于处理那些要开销来自合并阶段而非递归调用本身的场景。只要满足特定增长率的要求以及递归缩减的技术限制,就可以断言整个算法的时间复杂度等于合并成本 \( f(n) \)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

恭仔さん

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值