递归树方法是一种求解递归关系的方法。在该方法中,递归关系被转换为递归树。每个节点代表在不同递归级别产生的成本。为了找到总成本,将所有级别的成本相加。
用递归树法求解递归关系的步骤:
- 为给定的递归关系绘制递归树
- 计算 每个级别的成本并计算递归树中级别的总数。
- 统计最后一层的节点总数,计算最后一层的成本
- 总结递归树中所有级别的成本
让我们通过一些例子来看看如何解决这些递推关系:
问题 1: T(n) = 2T(n/2) + c
解决方案:
- 第 1 步:绘制递归树
- 第 2 步:计算每个级别完成的工作或成本,并计算递归树中级别的总数
计算总关卡数——
选择从根节点到叶节点的最长路径
n/20 -→ n/21 -→ n/22 -→ ……… -→ n/2k
最后一层问题的大小 = n/2 k
最后一级问题的大小变为 1
n/2k = 1
2k = n
k = log2(n)
递归树中的总级别数 = k +1 = log 2 (n) + 1
- Step 3:统计最后一层的节点总数,计算最后一层的成本
No. of nodes at level 0 = 20 = 1
No. of nodes at level 1 = 21 = 2
………………………………………………………
No. of nodes at level log2(n) = 2log2(n) = nlog2(2) = n
Cost of sub problems at level log2(n) (last level) = nxT(1) = nx1 = n
- 第 4 步:总结递归树中所有级别的成本
T(n) = c + 2c + 4c + —- + (no. of levels-1) times + last level cost
= c + 2c + 4c + —- + log2(n) times + Θ(n)
= c(1 + 2 + 4 + —- + log2(n) times) + Θ(n)
1 + 2 + 4 + —– + log2(n) times –> 20 + 21 + 22 + —– + log2(n) times –> Geometric Progression(G.P.)
= c(n) + Θ(n)
因此, T(n) = Θ(n)
问题 2:T(n) = T(n/10) + T(9n/10) + n
解决方案:
- 第 1 步:绘制递归树
- 第 2 步:计算每个级别完成的工作或成本,并计算递归树中级别的总数
计算总关卡数——
选择从根节点到叶节点的最长路径
(9/10)0n –> (9/10)1n –> (9/10)2n –> ……… –> (9/10)kn
Size of problem at last level = (9/10)kn
At last level size of problem becomes 1
(9/10)kn = 1
(9/10)k = 1/n
k = log10/9(n)
递归树中的总级别数 = k +1 = log 10/9 (n) + 1
- Step 3:统计最后一层的节点总数,计算最后一层的成本
No. of nodes at level 0 = 20 = 1
No. of nodes at level 1 = 21 = 2
………………………………………………………
No. of nodes at level log10/9(n) = 2log10/9(n) = nlog10/9(2)
Cost of sub problems at level log2(n) (last level) = nlog10/9(2) x T(1) = nlog10/9(2) x 1 = nlog10/9(2)
- Step 4: Sum up the cost all the levels in recursive tree
T(n) = n + n + n + —- + (no. of levels – 1) times + last level cost
= n + n + n + —- + log10/9(n) times + Θ(nlog10/9(2))
= nlog10/9(n) + Θ(nlog10/9(2))
因此, T(n) = Θ(nlog 10/9 (n))