Java 帕斯卡';s三角算法分析

Java 帕斯卡';s三角算法分析,java,algorithm,code-analysis,Java,Algorithm,Code Analysis,你认为下面的伪代码计算pascal三角形正确吗?它的时间和空间复杂性是什么样的?我怎么计算呢 pascal triangle(n){ list<list<int>> triangle // double list saving the triangle triangle.get(0).add(1) for(int i=1; i<n; i++){ for(int j=0; j<i; j++){

你认为下面的伪代码计算pascal三角形正确吗?它的时间和空间复杂性是什么样的?我怎么计算呢

pascal triangle(n){
    list<list<int>> triangle // double list saving the triangle




    triangle.get(0).add(1)
    for(int i=1; i<n; i++){
        for(int j=0; j<i; j++){
            if(triangle.get(i-1).get(j)==null || triangle.get(i-1).get(j-1)==null)  
                triangle.get(i).add(1)
            else
                triangle.get(i-1).add(triangle.get(i-1).get(j)+triangle.get(i-1).get(j-1))

        }

    }

    print(triangle)
}
pascal三角形(n){
列表三角形//双列表保存三角形
三角形。获取(0)。添加(1)

对于(inti=1;i,您的伪代码看起来很有意义

对于复杂性

您的算法尝试一次计算三角形的每个数。如果我们让每个计算的时间复杂度为常数,则我们正在执行:

sum(i) (0 -> n)
请原谅糟糕的符号以澄清:

如果n是6,那么我们将迭代6+5+4+3+2+1次。这种实际复杂性可以简化为:

(n + 1) * (n/2)
有效地

O(n^2)
看待复杂性的另一种方式

你基本上是在迭代中计算三角形的面积,即
b*h/2
。我们知道帕斯卡三角形的高度为n。三角形的底部(或底部)有n个数字。因此,我们生成:

n^2/2

它的复杂度是O(n^2)

在每次迭代中,你都会向列表中添加一个元素,所以看起来空间和内存的复杂度是相关的,不是吗?我刚刚编辑过。它与大小n有关。我认为空间的复杂度应该是log(n)。但是由于内部循环,运行时间对我来说有点难以理解。