我將如何去計算DP算法的大O。我已經意識到我的計算算法的方法並不總是奏效。我會用簡單的技巧來提取大O的內容。例如,如果我正在評估下面的算法沒有memoized版本(刪除緩存機制),我會看看遞歸方法在這種情況下自己調用3次的次數。然後我會將這個值提高到n(3^n)。由於遞歸堆棧不夠深,DP根本就不對。我的直覺告訴我,DP解決方案的大O將是O(n^3)。 我們如何口頭解釋我們如何得出這個答案。 更重要的是什麼是可以用來找到類似問題的大O的技術。由於它是DP,我相信子問題的數量很重要我們如何計算子問題的數量。如何計算動態規劃(Memoization)算法的大O O
public class StairCase {
public int getPossibleStepCombination(int n) {
Integer[] memo = new Integer[n+1];
return getNumOfStepCombos(n, memo);
}
private int getNumOfStepCombos(int n, Integer[] memo) {
if(n < 0) return 0;
if(n == 0) return 1;
if(memo[n] != null) return memo[n];
memo[n] = getNumOfStepCombos(n - 1, memo) + getNumOfStepCombos(n - 2, memo) + getNumOfStepCombos(n-3,memo);
return memo[n];
}
}