Loops 与嵌套循环有关的难题
对于给定的输入N,所包含的语句执行多少次Loops 与嵌套循环有关的难题,loops,time,for-loop,nested-loops,Loops,Time,For Loop,Nested Loops,对于给定的输入N,所包含的语句执行多少次 for i in 1 … N loop for j in 1 … i loop for k in 1 … j loop sum = sum + i ; end loop; end loop; end loop; 有人能想出一个简单的方法或公式来做这件事吗。请解释。 首先,我编写了一个C代码来生成sum: 然后,尝试通过一些图表来探索这是如何工作的?: 对于,N=1: 即(1)+(1+2)=4 对于,N=3: 最
for i in 1 … N loop
for j in 1 … i loop
for k in 1 … j loop
sum = sum + i ;
end loop;
end loop;
end loop;
有人能想出一个简单的方法或公式来做这件事吗。请解释。- 首先,我编写了一个
代码来生成sum:C
- 然后,尝试通过一些图表来探索这是如何工作的?:
对于,
:N=1
N=3
:
最后,我可以理解三个循环中N
的总和是:
(1) +(1到2的和)+…+(1到(N-2)之和)+(1到(N-1)之和)+(1到N之和)
或者我们可以这样写:
=>(1)+(1+2)+…+(1+2++…+i)+…+(1+2+..+N-1)+(1+2+..+N)
=>(N*1)+((N-1)*2)+((N-2)*3)+…+((N-i+1)*i)+…+(1*N)
有关简化计算,请参见此处:[你的答案]
=(((N)*(N+1)*(N+2))/6)
而且,我认为这是正确的。我检查如下:
N = 1, (1 * 2 * 3)/6 = 1
N = 2, (2 * 3 * 4)/6 = 4
N = 3, (3 * 4 * 5)/6 = 6
N = 4, (4 * 5 * 6)/6 = 10
N = 5, (5 * 6 * 7)/6 = 35
此外,该算法的复杂度为O(n3)
编辑:
下面的循环也具有相同的计数数,即=((N)*(N+1)*(N+2))/6)
for i in 1 … N loop
for j in i … N loop
for k in j … N loop
sum = sum + i ;
end loop;
end loop;
end loop;
您到底想实现什么?@Rhys对于这样的程序,每当您需要遍历整个程序或编写一个干运行表来计算所附语句的执行次数时。但是,有没有一种通用的方法可以通过查看for循环的条件来解决这个问题?添加非常类似的问题链接:
i<=N, (i=1)
|
j<=i, (j=1)
|
k<=j, (K=1)
|
sum=0. sum++ ---> sum = 1
i<=N, (i=1)-------(i=2)
| |-----|-----|
j<=i, (j=1) (j=1) (j=2)
| | |----|----|
k<=j, (K=1) (K=1) (K=1) (K=2)
| | | |
sum=0, sum++ sum++ sum++ sum++ --> sum = 4
i<=N, (i=1)-------(i=2)--------------------(i=3)
| |-----|-----| |---------|-------------|
j<=i, (j=1) (j=1) (j=2) (j=1) (j=2) (j=3)
| | |----|----| | |----|----| |-----|-----|
k<=j, (K=1) (K=1) (K=1) (K=2) (K=1) (K=1) (K=2) (K=1) (K=2) (K=3)
| | | | | | | | | |
sum=0, sum++ sum++ sum++ sum++ sum++ sum++ sum++ sum++ sum++ sum++
--> sum = 10
N = 1, (1) = 1
N = 2, (1) + (1 + 2) = 4
N = 3, (1) + (1 + 2) + (1 + 2 + 3) = 10
N = 4, (1) + (1 + 2) + (1 + 2 + 3) + (1 + 2 + 3 + 4) = 20
N = 5, (1) + (1 + 2) + (1 + 2 + 3) + (1 + 2 + 3 + 4) + (1 + 2 + 3 + 4 + 5) = 35
N = 1, (1 * 2 * 3)/6 = 1
N = 2, (2 * 3 * 4)/6 = 4
N = 3, (3 * 4 * 5)/6 = 6
N = 4, (4 * 5 * 6)/6 = 10
N = 5, (5 * 6 * 7)/6 = 35
for i in 1 … N loop
for j in i … N loop
for k in j … N loop
sum = sum + i ;
end loop;
end loop;
end loop;