簡體   English   中英

我的動態規划遞歸方法的時間復雜度是多少

[英]What is the time complexity of my recursive method with dynamic programming

我正在研究一種獲取集合“S”的 f(n) 的算法。 它被定義為

圖片

示例:f(4) = S(4) + f(3) + f(2) + f(1) + f(0)

這是我的偽代碼

func solve(int k, int[] s, int[] memo)
{
    if(k==0) //base case
        return s[0]
    if(memo[k] == -1) 
    {
        var nTemp = 0 
        for(int i=0; i < k; i++) 
            nTemp = (nTemp + solve(i, s, memo)) 
        memo[k] = (nTemp + s[k]) 
    }
    return memo[k]
}

我不確定它的時間復雜度,我認為它是 O(n) 但我不確定。

讓我們考慮從k = 1開始必須執行多少個操作solve

k = 1: memo[1] = s[0] + s[1] -> 1 sum
k = 2: memo[2] = memo[0] + memo[1] + s[2] -> 2 sums
...
k = m: memo[s] = memo[0] + memo[1] + ... + s[m] -> m sums  

所以實際上,操作的次數是1 + 2 + .. + k = (k + 1)*k/2 ~ k*k 因此,總時間復雜度為O(k^2)

但是,如果高達k-1值已經緩存在memo並且我們需要計算f(k)那么時間復雜度是O(k)因為它只是關於總結memo[i]使得i<k

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM