Yuxuan Lin
写作

递归

笔记,编程与算法 / 算法与题解2 分钟阅读

题目:递归算法时间复杂度分析

1. 题目描述

给定一个递归算法的时间复杂度表达式:

  • 当 n≤1n \le 1 时,T(n)=0T(n) = 0
  • 当 n>1n > 1 时,T(n)=8T(n2)+2n3+3n2T(n) = 8T(\frac{n}{2}) + 2n^3 + 3n^2

则该算法的时间复杂度为( )

A. O(n3)O(n^3)
B. O(n3log⁡n)O(n^3 \log n)
C. O(n4)O(n^4)
D. O(n4log⁡n)O(n^4 \log n)

正确答案:B


2. 核心考点:主定理 (Master Theorem)

对于形如 T(n)=aT(nb)+f(n)T(n) = aT(\frac{n}{b}) + f(n) 的递归式,我们可以通过比较 f(n)f(n) 与 nlog⁡ban^{\log_b a} 的阶级来确定复杂度。

本题推导过程:

  1. 确定参数:

    • a=8a = 8 (递归子问题的数量)
    • b=2b = 2 (每个子问题的规模缩小比例)
    • f(n)=2n3+3n2f(n) = 2n^3 + 3n^2 (合并子问题所需的额外工作)
  2. 简化 f(n)f(n): 在渐进复杂度分析中,只保留最高次项,故 f(n)=O(n3)f(n) = O(n^3)。即 d=3d = 3。

  3. 计算关键项 nlog⁡ban^{\log_b a}:

log⁡ba=log⁡28=3\log_b a = \log_2 8 = 3
因此,关键项为 $n^3$。

4. 比较与结论: 由于 f(n)=O(n3)f(n) = O(n^3) 且 nlog⁡ba=n3n^{\log_b a} = n^3,两者同阶(满足主定理的第二种情况)。 根据公式,当两者同阶时:

T(n)=O(nlog⁡ba⋅log⁡n)=O(n3log⁡n)T(n) = O(n^{\log_b a} \cdot \log n) = O(n^3 \log n)

3. 知识点总结(快速查表)

情况关系复杂度结论
Case 1f(n)<nlog⁡baf(n) < n^{\log_b a}T(n)=O(nlog⁡ba)T(n) = O(n^{\log_b a})
Case 2f(n)=nlog⁡baf(n) = n^{\log_b a}T(n)=O(nlog⁡balog⁡n)T(n) = O(n^{\log_b a} \log n)
Case 3f(n)>nlog⁡baf(n) > n^{\log_b a}T(n)=O(f(n))T(n) = O(f(n))