Как бы я мог вычислить большой O алгоритма DP. Я понял, что мои методы расчета алгоритмов не всегда работают. Я бы использовал простые трюки, чтобы извлечь то, что было Big O. Например, если бы я оценивал не memoized версию алгоритма ниже (удаление механизма кэширования), я бы посмотрел, сколько раз рекурсивный метод называл себя в этом случае 3 раза. Тогда я повысил бы это значение до n, давая O (3^n). С DP, который не совсем прав, потому что рекурсивный стек не идет так глубоко. Моя интуиция подсказывает мне, что Big O решения DP будет O (n^3). Как мы устно объясним, как мы пришли к этому ответу. Что еще важно, что такое техника, которая может быть использована для поиска Big O подобных проблем.. Поскольку это DP, я уверен, что число подвыборок важно , как мы вычислим количество вспомогательных проблем.Как рассчитать алгоритм динамического программирования (Memoization) Big 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];
}
}