Skip to content

方法Method

递归树法

施工中 · 内容逐步修订

Recursion-tree method

把递归式各层代价展开成树并对层和叶子求和的渐近分析方法。

形式陈述 ​

递归树法逐层展开递归关系,把子问题自身的成本与其后代的成本分开计数。以 T(n)=aT(n/b)+f(n) 为例,假设整数 a≥1、b>1、n=bh,规模 1 时停止,且 T(1)=c>0。第 i 层有 ai 个规模为 n/bi 的节点,每个节点只标非递归工作 f(n/bi)。于是

T(n)=∑i=0h−1aif(n/bi)+ahc,h=logb⁡n.

最后一项单独计入叶子基例,避免把叶子遗漏或重复计数。求和后用渐近记号报告增长率。

只要展开等式、停止条件和求和界都已证明,递归树计算本身就可以构成严格证明。草图若只展示前几层,则只是猜测的依据;对于非整幂输入,还须处理上下取整及实际叶规模,必要时用代入法验证。

直觉

递归树把递推式分散的工作展开成按深度排列的子问题,分别计算每层非递归工作和叶子成本,再求和。观察每层工作是递增、递减还是同阶,往往能直接看出总成本由根、所有层还是叶子主导;它比直接套公式更直观,也能处理部分不规则递归。但必须正确跟踪每层节点数、子问题规模和停止深度;这棵树是成本展开图,不一定对应算法真实存储的递归树。

递归树的层成本与总成本
例子与边界

图中 T(n)=2T(n/2)+n 的每个内部层成本都是 2i(n/2i)=n。有 h=log2⁡n 个内部层,另有 2h=n 个叶,所以 T(n)=nlog2⁡n+cn=Θ(nlog⁡n)。例如 n=8,c=1 时,规模为 8,4,2 的三层各花 8,叶层也花 8,总成本 32。这里“每层都是 n”是对节点数与节点成本相乘的结果,不是只看节点数。T(n)=3T(n/2)+n 的第 i 层成本为 n(3/2)i,靠近叶层占优,结果为 Θ(nlog2⁡3)。

作为对照,T(n)=T(n/2)+n 的层成本构成几何级数,总计 Θ(n);非均匀递推 T(n)=T(n/3)+T(2n/3)+n 中,每次分裂保持子问题总规模不变,但沿 1/3 分支会更早到叶。完整展开的前 Θ(log⁡n) 层各有线性成本,任何一层仍活动的节点规模总和不超过 n,最长路径也只有 O(log⁡n) 层;在常数基例与通常取整约定下得到 Θ(nlog⁡n)。递归树中节点数不能只乘“层数”,因为每层子问题大小会变化。

子问题不等规模时不能只写“每层节点翻倍”;需按实际分支加总。递归式中的取整、边界条件和叶成本也可能影响低阶项,因此不能仅把某个完整层的成本乘以最长路径长度就当作精确总和。

推论与应用

递归关系给出展开对象,渐近记号给出求和结果。主定理封装规则分治树,代入法则严格证明树形直觉得到的界。递归树本身只是一种成本展开,不预设成本必须是多项式。

有界搜索树按参数 k 展开分支,常得到 T(k)=∑iT(k−di)+poly(n);测度与征服进一步为不同状态赋权,改变每条分支的有效下降量。缓存无关模型中的递归分解还要按块传输求和,层成本不再只是 RAM 操作数。三者都能画树,但参数、叶成本和资源单位不同。

参考资料
  • 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。

关系图谱8 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系