“递归树法把第 $i$ 层展开为 $a^i$ 个规模 $n/b^i$ 的子问题,所以该层的非递归成本是 $$ a^i f(n/b^i). $$ 共有 $h=\log b n$ 个内部层,叶子总…”
形式陈述
递归树法逐层展开递归关系,把子问题自身的成本与其后代的成本分开计数。以
最后一项单独计入叶子基例,避免把叶子遗漏或重复计数。求和后用渐近记号报告增长率。
只要展开等式、停止条件和求和界都已证明,递归树计算本身就可以构成严格证明。草图若只展示前几层,则只是猜测的依据;对于非整幂输入,还须处理上下取整及实际叶规模,必要时用代入法验证。
直觉
递归树把递推式分散的工作展开成按深度排列的子问题,分别计算每层非递归工作和叶子成本,再求和。观察每层工作是递增、递减还是同阶,往往能直接看出总成本由根、所有层还是叶子主导;它比直接套公式更直观,也能处理部分不规则递归。但必须正确跟踪每层节点数、子问题规模和停止深度;这棵树是成本展开图,不一定对应算法真实存储的递归树。
例子与边界
图中
作为对照,
子问题不等规模时不能只写“每层节点翻倍”;需按实际分支加总。递归式中的取整、边界条件和叶成本也可能影响低阶项,因此不能仅把某个完整层的成本乘以最长路径长度就当作精确总和。
推论与应用
递归关系给出展开对象,渐近记号给出求和结果。主定理封装规则分治树,代入法则严格证明树形直觉得到的界。递归树本身只是一种成本展开,不预设成本必须是多项式。
有界搜索树按参数
参考资料
-
Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein, Introduction to Algorithms, 4th ed., MIT Press, 2022,§4.4。
-
Jon Kleinberg and Éva Tardos, Algorithm Design, Pearson, 2005,Ch. 5。
-
Charles E. Leiserson, MIT 6.046J Introduction to Algorithms, Fall 2005,Lecture 2 文字稿:Recursion-tree method。