Java 帕斯卡';s三角算法分析
你认为下面的伪代码计算pascal三角形正确吗?它的时间和空间复杂性是什么样的?我怎么计算呢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 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)。但是由于内部循环,运行时间对我来说有点难以理解。