指令执行C ++代码

时间:2013-06-26 16:54:19

标签: algorithm time-complexity asymptotic-complexity

你好,我在C ++中有一个algorthm,我想找到执行的指令。代码在

之下
cin >> n;   
for(i=1;i<=n;i++)
     for (j = 1; j <= n; j ++) 
     A[i][j] = 0;

for(i=1;i<=n;i++) 
A[i][i] = 1;

现在,经过我的计算,我得到了 T(n)= n ^ 2 + 8n-5 。我只是需要其他人来验证我是否正确。感谢

1 个答案:

答案 0 :(得分:0)

好的,让我们一步一步地进行分析。

第一条指令

cin >> n

算作一项操作: 1

然后循环

for(i=1;i<=n;i++)
     for (j = 1; j <= n; j ++) 
     A[i][j] = 0;

让我们从内到外。 j循环执行n个数组分配(A[i][j] = 0),(n + 1)j <= n比较和n j ++分配。它也会在作业j = 1后执行。总的来说,这给出了:n +(n + 1)+ n + 1 = 3n + 2。

然后外部i循环执行(n + 1)i <= n次比较,n i ++次分配并执行n次j循环。它还执行一次i = 1分配。这导致:n +(n + 1)+ n *(3n + 2)+ 1 = 3n ^ 2 + 4n + 2

最后,最后一个for循环执行n个数组赋值,(n + 1)i <= n比较和n i ++赋值。它还执行一项任务i = 1。这导致:n +(n + 1)+ n + 1 = 3n + 2

现在,我们得到三个操作:

(1)+(3n ^ 2 + 4n + 2)+(3n + 2)= 3n ^ 2 + 7n + 5 = T(n)总操作。

时间函数是等效的,假设赋值,比较,加法和cin都是在恒定时间内完成的。这将产生复杂度为O(n ^ 2)的算法。

这是假设n> = 1的诅咒。