【问题标题】:Recurrence relation: iteration solving递归关系:迭代求解
【发布时间】:2015-07-19 00:17:25
【问题描述】:

有如下递归关系:

T(n) = 2 T(n-1) + O(1) for n > 1 
otherwise, its T(n) = O(1)

通过迭代,到目前为止我得到了这样的结果,

T(n) = 2(2T(n-2) + 1) + 1 --- 1
T(n) = 2(2(2T(n-3) + 1) + 1) + 1 ---- 2
T(n) = 2(2(2(2T(n-4) + 1) + 1) + 1) + 1 ------3
T(n) = 2(2(2(2(2T(n-5) + 1) + 1) + 1) + 1) +1 ----- 4

我不确定接下来要做什么来找到上限时间复杂度。谁能帮我解决这个问题。

【问题讨论】:

  • 与论坛网站不同,我们不使用“谢谢”、“感谢任何帮助”或Stack Overflow 上的签名。请参阅“Should 'Hi', 'thanks,' taglines, and salutations be removed from posts?.
  • 好的会记住的!
  • 你的cmets“否则,它的T(n) = O(1)”在渐近框架中是没有意义的。
  • 这件事的症结在于,渐近递归不像标准递归那样求解,因为 O(1) 表示未知函数,而不是常数。
  • 我能知道为什么我在这个问题上被否决了吗?谢谢

标签: algorithm iteration time-complexity recurrence upperbound


【解决方案1】:

根据O(1)的定义,我们知道对于一些常量Nc,对于所有n >= N

T(n+1) <= 2 T(n) + c

所以,识别几何系列的模式,

T(N+1) <= 2 T(N) + c
T(N+2) <= 2 T(N+1) + c <= 4 T(N) + 2 c + c
T(N+3) <= 2 T(N+2) + c <= 8 T(N) + 4 c + 2 c + c
...
T(N+k) <= 2^k T(N) + (2^k-1) c

然后将N + k替换为n

T(n) <= 2^(n-N) T(N) + (2^(n-N)-1) c <= 2^n (2^(-N) (T(N) + c))

这证明T(n)O(2^n)

【讨论】:

  • which proves that T(n) is O(2^n)。这不是证据。声明T(N+k) &lt;= 2^k T(N) + (2^k-1) c 未被证实,... 部分不是证据。您需要使用归纳法(例如)来证明它。
  • 很抱歉您不能听从我的观点。我建议你检查en.wikipedia.org/wiki/Big_O_notation
  • 我非常了解这个定义,它与它无关。您未能证明T(N+k) &lt;= 2^k T(N) + (2^k-1) c 的主张,后来您将证明基于未经证实的主张。直觉很有趣,但这不是证据。
  • 我添加了一个足以作为证明的理由(恶意除外)。
【解决方案2】:

看第四步

T(n) = 2(2(2(2(2T(n-5) + 1) + 1) + 1) + 1) +1 ----- 4
T(n) = 2(2(2(2(2T(n-5))))) + 16 + 8 + 4 + 2 +1 = 
T(n) = 2^4* 2T(n-5) + 2^4 + 2^3 + 2^2 + 2^1 + 2^0 =
T(n) = 2^4* 2T(n-5) + 2^5 -1 =

同样,如果你做同样的事情并再开发一次,你会得到:

T(n) = 2^5 *2T(n-6) + 2^5 + 2^5-1
T(n) = 2^5 * 2T(n-6) + 2^6-1

现在我们可以理解,如果我们将它开发到 T(1) 的基数,我们会得到:

T(n) = .... = 2^(n) -1 

请注意,这种方法只是给出解决问题的直觉,它不是证明。


要正式证明该声明,您可以使用归纳法,并声明假设T(n) = 2^n -1

基地:T(1) = 1 = 2^1 -1

归纳假设:对于所有k&lt;nT(k) = 2^k-1

证明:

T(n) = 2T(n-1) +1 =(i.h.) 2* (2^(n-1) -1) + 1 = 2^n -2 + 1 = 2^n - 1

备注:T(1) 基本子句实际上是C,类似地T(n) = 2T(n-1)+C 是一些常量而不是1,但为了简单起见,我使用1。将其更改为C 时,逻辑根本不会发生变化。

【讨论】:

  • 非常感谢您提供如此清晰的解释!所以现在,根据迭代解 2^(n) -1 ,上界时间复杂度为 O(2^n) ?
  • @Dee 是的。但请记住,迭代方法不是正式的证明。这只对直觉有好处。
  • 是的,但只是想尝试使用迭代(我以前从未这样做过)。那么,这意味着 O(2^n) 是这个函数的复杂度吗?
  • 另外,请问您是如何从2^4 + 2^3 + 2^2 + 2^1 + 2^0 获得2^5 -1 的?这有点不清楚。
  • 对不起,我现在明白了:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-28
  • 1970-01-01
相关资源
最近更新 更多