【问题标题】:What's the run time of: T(n) = 2T(n-1) + 3T(n-2)+ 1运行时间是多少:T(n) = 2T(n-1) + 3T(n-2)+ 1
【发布时间】:2013-02-20 21:55:47
【问题描述】:

我知道它类似于具有指数运行时间的斐波那契数列。然而,这种递归关系有更多的分支。 T(n) = 2T(n-1) + 3T(n-2)+ 1 的渐近界是多少?

【问题讨论】:

  • 如果你知道起始术语,你可以手写出来。 T(0) = ? T(1)= ?。从中你可以得到其余的条款
  • t(n) = F(t(n-1),t(n-2)) 中的分支数对于任何 F 都是相同的,所以如果你有斐波那契的解序列,...

标签: algorithm math big-o time-complexity recurrence


【解决方案1】:

通常,您需要对 T(0) 和 T(1) 做出一些假设,因为它们的数量会成倍增加,并且它们的值可能会决定 T(n) 的函数形式。但是在这种情况下,这似乎无关紧要。

然后,这种形式的递归关系可以通过找到它们的特征多项式来解决。我找到了这篇文章:http://www.wikihow.com/Solve-Recurrence-Relations

我得到了根为 3 和 1 的特征多项式,因此猜到了T(n) = c_1*3^n + c_2 的形式。特别是T(n) = 1/2*3^n - 1/4满足递归关系,我们可以验证这一点。

1/2*3^n - 1/4 = 2*T(n-1) + 3*T(n-2) + 1
              = 2*(1/2*3^(n-1) - 1/4) + 3*(1/2*3^(n-2) - 1/4) + 1
              = 3^(n-1) - 1/2 + 1/2*3^(n-1) - 3/4 + 1
              = 3/2*3^(n-1) - 1/4
              = 1/2*3^n - 1/4

因此它会给出T(n) = Theta(3^n)。但是,这可能不是唯一满足循环的函数,其他可能性也取决于您定义的值 T(0)T(1),但它们都应该是 O(3^n)

【讨论】:

  • 这实际上并没有回答问题。
  • 为什么不能解决问题?我给你一个满足递归关系的函数,并证明了这一点。
  • 因为这个问题与分析解决方案完全无关。
  • 你真是太不尊重人了。我认为您根本不理解这个问题,现在您正在拖钓两个试图回答它的人。 T(n) 是算法在大小为 n 的特定输入上的运行时间,递归关系用递归定义了它的结构。我们正在尝试使用这种递归关系求解T(n)。你认为这个问题是关于什么的?如果您认为自己是个能人,也许您应该回答它。
  • 斐波那契类型的递归关系(当递归应用时)将具有指数级的递归调用。这是关于指数运行时间的评论。您的答案没有涉及分支方面。
【解决方案2】:

这种类型的递归称为:non-homogeneous recurrence relations,你必须在一开始解决齐次递归(最后没有常数的那个)。如果您有兴趣,请阅读其背后的数学原理。

我会告诉你一个简单的方法。只需在wolfram-alpha 中输入您的方程式,您将获得:

,

这显然是指数级的复杂度:O(3^n)

【讨论】:

  • T(n) = ... which is clearly an exponential complexity: O(3^n) 您和@AndrewMao 的答案中的O(3^n) 是值的渐近T(n) 行为。它不是计算T(n) 的算法复杂度(请注意,原始问题标记为algorithmtime-complexity)。运行所写的迭代的时间复杂度确实是指数级的,但是从显式公式计算 T(n) 具有实际的时间复杂度 O(log n) (Time complexity of power())。
猜你喜欢
  • 2014-05-09
  • 2019-03-23
  • 1970-01-01
  • 2019-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-25
相关资源
最近更新 更多