簡體   English   中英

帶有記憶的遞歸斐波那契的空間復雜性?

[英]Space complexity for recursive Fibonacci with memoization?

我有這兩種方法來查找給定數字“ n”的斐波那契數列。 一個使用備忘錄。

我想知道這兩種方法的空間復雜度有何不同:

    public static int fib(int n, int[] mem){

    if(n ==0 || n ==1 ){
        return n;
    }

    if(mem[n] > 0 ) {
        return mem[n]);
    }

    mem[n] = fib(n-1,mem) + fib(n-2,mem);

    return mem[n]; 

}

沒有備注:

public static int fib(int n){

    if(n ==0 || n ==1 ){
        return n;
    }

   return fib(n-1) + fib(n-2);


}

直接內存的使用是不言而喻的-使用記憶功能,fib中的每個值將只計算一次,因此您的空間復雜度將為o(n),其中n是fib的輸入數字(記憶數組將包含n個數字)。

沒有備忘功能-不需要額外的內存(缺點是很多冗余計算)。

傳遞給每個遞歸調用的備注數組是同一數組..還是該數組的副本? 如果傳遞了數組的副本,則空間復雜度將> O(n)。

您將相同的數組引用傳遞給遞歸調用。

這意味着您的空間復雜度為o(n)。 如果您要創建一個新數組並通過它,則您的備注將無法正常工作,因為您必須將更新后的新數組的結果與上一個合並。

暫無
暫無

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

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