Java 动态规划-什么';什么是渐近运行时间?

Java 动态规划-什么';什么是渐近运行时间?,java,math,runtime,dynamic-programming,asymptotic-complexity,Java,Math,Runtime,Dynamic Programming,Asymptotic Complexity,我在自学动态规划。它几乎是神奇的。但说真的。不管怎么说,我解决的问题是:如果一个楼梯有N个台阶,一个孩子一次可以走1步、2步或3步,那么这个孩子可以用多少种不同的方式到达最高的台阶?。问题不太难,我的实现如下 import java.util.HashMap; public class ChildSteps { private HashMap<Integer, Integer> waysToStep; public ChildSteps() { w

我在自学动态规划。它几乎是神奇的。但说真的。不管怎么说,我解决的问题是:
如果一个楼梯有N个台阶,一个孩子一次可以走1步、2步或3步,那么这个孩子可以用多少种不同的方式到达最高的台阶?
。问题不太难,我的实现如下

import java.util.HashMap;

public class ChildSteps {
    private HashMap<Integer, Integer> waysToStep;

    public ChildSteps() {
        waysToStep = new HashMap<Integer, Integer>();
    }

    public int getNthStep(int n) {
        if (n < 0) return 0; // 0 ways to get to a negative step

        // Base Case
        if (n == 0) return 1;

        // If not yet memorized
        if (!waysToStep.containsKey(n)) {
            waysToStep.put(n, getNthStep(n - 3) + getNthStep(n - 2) + getNthStep(n - 1));
        }

        return waysToStep.get(n);
    }
}
import java.util.HashMap;
公共类儿童步{
私有HashMap方法步骤;
公共儿童步骤(){
waysToStep=newhashmap();
}
公共整数getNthStep(整数n){
if(n<0)返回0;//0到达负步长的方法
//基本情况
如果(n==0)返回1;
//如果还没有记住
如果(!waysToStep.containsKey(n)){
放置(n,getNthStep(n-3)+getNthStep(n-2)+getNthStep(n-1));
}
返回方式步骤。获取(n);
}
}
但是,现在我想获取运行时。我该怎么弄清楚呢?我对Akra Bazzi和Master定理很熟悉(不多)。这里适用吗

这里似乎是:
T(N)=3*T(??)+O(1)
,但我真的不确定


谢谢各位

在最坏情况下的情景分析中:

T(N) = N * (containsKey(N) + 8)
假设containsKey=N(它可能是
N^2
Log(N)
),则简化为
T(N)=N

您必须找出
containsKey(N)
的函数才能得到实际的方程式


你真的想得太多了;你不需要为此做算法分析。对你来说,这句话很好:“过早优化是万恶之源”

在最坏的情况分析中,它应该是:

T(N) = N * (containsKey(N) + 8)
假设containsKey=N(它可能是
N^2
Log(N)
),则简化为
T(N)=N

您必须找出
containsKey(N)
的函数才能得到实际的方程式


你真的想得太多了;你不需要为此做算法分析。对你来说这句话很好:“过早优化是万恶之源”

你首先计算出了这个问题的数学方程了吗?不,我真的不知道怎么做。一个什么的方程式?给定N步,如果你一次可以走m步,有多少种不同的方法可以到达顶端。一旦你知道了这个方程,你就把它变成了一个很小的问题。你不是说给定N个步骤,可以采取m个或更少的步骤吗(其中m>0和m,你可以看看这个来获得一些想法。我尽量不为你做你的工作。你先计算出这个的数学方程了吗?不,我真的不知道怎么做。一个什么的方程,确切地说?给定N步,如果你一次可以走m步,有多少种不同的方法可以到达顶部。一旦你知道这个方程,那么y你把这当成了一个小问题。你的意思是给定N个步骤,可以采取m个或更少的步骤(其中m>0和m,你可以看看这一点,了解一些想法。我尽量不为你做你的工作。你能解释一下你是怎么做到这一行的吗:
t(N)=N*(containsKey(N)+8)
?是的,我不是在真正优化,我只是想学习如何计算渐近运行时。你能解释一下你是如何做到这一点的:
T(N)=N*(containsKey(N)+8)
?是的,我不是在真正优化,我只是想学习如何计算渐近运行时。