你好,我在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 。我只是需要其他人来验证我是否正确。感谢
答案 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的诅咒。