[英]Pascal's Triangle Algorithm Analysis
您认为下面的伪代码对计算帕斯卡的三角形是正确的吗? 它的时间和空间复杂度如何? 以及如何计算呢?
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)
}
您的伪代码看起来很有意义。
对于复杂性
您的算法尝试计算一次三角形的每个数。 如果让每个计算成为恒定的时间复杂度,那么我们正在做:
sum(i) (0 -> n)
请原谅可怜的符号 以澄清:
如果n为6,那么我们将迭代6 + 5 + 4 + 3 + 2 + 1次。 这种实际的复杂性可以简化为:
(n + 1) * (n/2)
有效
O(n^2)
另一种看待复杂性的方法
您实际上是在迭代中做一个三角形的面积,即b*h/2
。 我们知道Pascal三角形的高度为n 。 三角形的底部(或底部)有n个数字。 因此,我们正在生成:
n^2/2
复杂度为O(n ^ 2)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.