You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

划分函数T(n)递推式推导及主定理求解的O(n)工作量疑问

分析递推式T(n) = T(n/2 + 1) + T(n/2 - 1)的渐近复杂度

嘿,咱们一步一步来拆解这个问题,先从递推式的简化分析开始,再验证它的渐近复杂度是不是O(n):

1. 递推式的渐近简化

首先,当n足够大时,n/2 + 1和n/2 - 1这两个子问题规模的渐近量级都是Θ(n/2)——常数项±1在n趋向无穷时可以忽略,因为它们和n的比例趋近于0。所以我们可以先把递推式近似为:
T(n) ≈ 2T(n/2)

不过严谨起见,我们可以通过替换法来严格证明它的复杂度。

2. 用替换法证明T(n) = Θ(n)

我们先假设T(n)的上界是O(n),即存在常数c > 0和足够大的n,使得T(n) ≤ c·n。将其代入递推式:

T(n) = T(n/2 + 1) + T(n/2 - 1)
     ≤ c·(n/2 + 1) + c·(n/2 - 1)
     = c·(n/2 + 1 + n/2 - 1)
     = c·n

刚好满足上界的假设,说明O(n)是成立的。

再看下界,假设T(n) ≥ d·n(d > 0为常数),代入递推式:

T(n) = T(n/2 + 1) + T(n/2 - 1)
     ≥ d·(n/2 + 1) + d·(n/2 - 1)
     = d·n

同样满足下界假设,所以T(n) = Θ(n),自然也属于O(n)的工作量范畴。

3. 主定理的应用

主定理标准形式是T(n) = aT(n/b) + f(n),这里虽然子问题规模不是严格的n/2,而是n/2 ±1,但由于n/2 ±1 = Θ(n/2),我们可以把它适配到主定理的框架中:

  • a=2(每次递归拆分成2个子问题)
  • b=2(子问题规模渐近为原问题的1/2)
  • log_b a = log₂2 = 1

基础情况中,假设T(1)、T(2)都是常数,即f(n)=O(1)=O(n^(1-ε))(取ε=1即可),符合主定理的第一种情况,因此T(n)=Θ(n^1)=Θ(n)。

总结

不管是替换法还是适配主定理分析,都能得出这个递推式的渐近复杂度是Θ(n),也就是你关心的O(n)工作量是成立的——递归拆分的子问题总规模每次都是线性的,没有指数级增长的情况。

内容的提问来源于stack exchange,提问作者mj-go

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:11:29