📜  如何使用递归树方法解决时间复杂度递归关系?

📅  最后修改于: 2021-09-27 14:49:59             🧑  作者: Mango

递归树方法是一种求解递归关系的方法。在该方法中,递归关系被转换为递归树。每个节点代表在不同递归级别产生的成本。为了找到总成本,将所有级别的成本相加。

用递归树法求解递归关系的步骤:

  1. 为给定的递归关系绘制递归树
  2. 计算 每个级别的成本并计算递归树中级别的总数。
  3. 统计最后一层的节点总数,计算最后一层的成本
  4. 总结递归树中所有级别的成本

让我们通过一些例子来看看如何解决这些递推关系:

问题 1: T(n) = 2T(n/2) + c

解决方案:

  • 第 1 步:绘制递归树

递归树

  • 第 2 步:计算每个级别完成的工作或成本,并计算递归树中级别的总数

每个级别成本的递归树

计算总关卡数——

选择从根节点到叶节点的最长路径

最后一层问题的大小 = n/2 k

 最后一级问题的大小变为 1

递归树中的总级别数 = k +1 = log 2 (n) + 1

  • Step 3:统计最后一层的节点总数,计算最后一层的成本
  • 第 4 步:总结递归树中所有级别的成本  

因此, T(n) = Θ(n)

问题 2:T(n) = T(n/10) + T(9n/10) + n

解决方案:

  • 第 1 步:绘制递归树

递归树

  • 第 2 步:计算每个级别完成的工作或成本,并计算递归树中级别的总数

每个级别成本的递归树

计算总关卡数——

选择从根节点到叶节点的最长路径

递归树中的总级别数 = k +1 = log 10/9 (n) + 1

  • Step 3:统计最后一层的节点总数,计算最后一层的成本

因此, T(n) = Θ(nlog 10/9 (n))