簡體   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