繁体   English   中英

如何解决:T(n)= T(n - 1)+ n

[英]How to solve: T(n) = T(n - 1) + n

我得到以下结论:

T(n) = T(n - 1) + n = O(n^2)

现在,当我解决这个问题时,我发现边界非常宽松。 我做错了什么或是这样吗?

您还需要一个基于重复关系的基础案例。

T(1) = c
T(n) = T(n-1) + n

要解决这个问题,您可以先猜测一个解决方案,然后使用归纳法证明它是有效的。

T(n) = (n + 1) * n / 2 + c - 1

首先是基础案例。 当n = 1时,根据需要给出c。

对于其他n:

  T(n)
= (n + 1) * n / 2 + c - 1
= ((n - 1) + 2) * n / 2 + c - 1
= ((n - 1) * n / 2) + (2 * n / 2) + c - 1
= (n * (n - 1) / 2) + c - 1) + (2 * n / 2)
= T(n - 1) + n

所以解决方案有效。

要获得猜测,请注意当c = 1时,您的递归关系会生成三角形数字

T(1) = 1:

*

T(2) = 3:

*
**

T(3) = 6:

*
**
***

T(4) = 10:

*
**
***
****

etc..

直观地,三角形大约是正方形的一半,并且在Big-O表示法中,常数可以被忽略,因此O(n ^ 2)是预期的结果。

想一想:
在递归的每次“迭代”中,您执行O(n)工作。
每次迭代都有n-1个工作要做,直到n =基本情况。 (我假设基本情况是O(n)工作)
因此,假设基本情况是n的常量独立,则存在递归的O(n)次迭代。
如果每次都有n次迭代的O(n)工作,则O(n)* O(n)= O(n ^ 2)。
你的分析是正确的。 如果您想了解有关这种求解递归的更多信息,请查看递归树。 与其他方法相比,它们非常直观。

这个解决方案非常简单。 您必须展开递归:

T(n) = T(n-1) + n = T(n-2) + (n - 1) + n = 
= T(n-3) + (n-2) + (n-1) + n = ... =
= T(0) + 1 + 2 + ... + (n-1) + n 

你在这里有算术级数,总和是1/2*n*(n-1) 从技术上讲,这里缺少边界条件,但是在任何常量边界条件下,您会看到递归为O(n^2)

看起来是正确的,但将取决于基本情况T(1)。 假设您将执行n步骤以使T(n)变为T(0)并且每次n项在0和n之间的任何位置,平均为n / 2,因此n * n / 2 =(n ^ 2)/ 2 = O(n ^ 2)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM