← 返回内容列表

三种解递推式的武器:递归树、代入法、主定理

分享本文
三种解递推式的武器:递归树、代入法、主定理

分析递归式有三件套:递归树给直觉、代入法做严格证明、主定理是分治情形的速查。本文讲清三者如何配合,避免只会背公式。

主定理三情况:比较 f(n) 与 n^{log_b a}情况 1f(n) = O(n^{log_b a − ε})T(n) = Θ(n^{log_b a})叶子 dominating:底层功最大情况 2f(n) = Θ(n^{log_b a} logᵏn)T(n) = Θ(n^{log_b a} log^{k+1}n)均衡:每层同阶,多乘一个 log情况 3f(n) = Ω(n^{log_b a + ε})T(n) = Θ(f(n))根 dominating:顶层功最大(需正则性)

图:主定理按 f(n) 与临界值 n^{log_b a} 的大小分三种情况

面对一个递推式,工程上通常三步走:

① 递归树:先画树、加各层代价,快速"猜"出 Θ\Theta 阶。它最直观,也能处理主定理卡不到的边界情形。

② 代入法:用猜出的阶做归纳假设(如 T(n)cnlognT(n)\le c n\log n),严格证明上下界。它是"证明工具",不是"猜工具"。

③ 主定理:当递推正好是 aT(n/b)+f(n)aT(n/b)+f(n) 时,直接查三情况,省去画树与归纳。它是前两者的"提速包"。

参考代码:把三种思路写进一个判定器

def solve(a, b, f_order):
    """f_order: 'lt'/'eq'/'gt' 表示 f(n) 相对 n^{log_b a} 的关系。"""
    if f_order == 'lt':
        return "情况1: Θ(n^{log_b a})    # 递归树叶子主导"
    if f_order == 'eq':
        return "情况2: Θ(n^{log_b a} log n)  # 各层均衡,代入法证"
    return "情况3: Θ(f(n))             # 根主导,需正则性"

print(solve(2, 2, 'eq'))     # 归并
print(solve(1, 2, 'eq'))     # 二分

记住:主定理能套就套(最快),套不上就回到递归树 + 代入法。三者互补,没有谁取代谁。

关联推荐

评论 (0)

正文划词可点「问萝卜特」——自动发评论并由 AI 回复

加载评论中…

三种解递推式的武器:递归树、代入法、主定理 | 必学必会