【发布时间】:2021-06-14 00:55:37
【问题描述】:
int fun_3(int a[], int n){
int sum = 0;
for (i=0 ; i<n ;i++){
for (j=0 ; j<n ; j++){
for (k=0 ; k<n ; k++){
if (a[i] > 100)
sum += 1;
return sum;
}
我统计了这段代码最坏情况下的运算次数除以加法运算、比较运算和赋值运算(不考虑运算时间)。
赋值操作:
int sum = 0 -> 1 次操作
for (i=0;;) -> 1 次操作
for (;;i++) -> n 操作
for (j=0;;) -> n 操作
for (;;j++) -> n^2 运算
for (k=0;;) -> n^2 操作
for (;;k++) -> n^3 操作
sum += 1 -> n^3 运算
赋值操作总数 = 2n^3 + 2n^2 + 2n + 2
加法运算:
for(;;i++) -> n 操作
for(;;j++) -> n^2 操作
for(;;k++) -> n^3 操作
sum += 1 -> n^3 运算
总操作数 = 2n^3 + n^2 + n
比较操作:
for(;i
for(;j
for(;k
如果 (a[i] > 100) -> n^3
比较的总操作数 = 2n^3 + 2n^2 + 2n + 1
此代码的操作总数 = 6n^3 + 5n^2 + 5n + 3
但是我大学同事的结果和我的结果不同。我想知道我的计算是对还是错。
【问题讨论】:
-
问题中是否指定了所有此类操作的成本,还是您做出了假设?
-
我认为是 O(n^3)
-
重要的是
Big O...您的代码是O(n^3),即:将元素数量加倍使其性能降低8(2^3) 倍。
标签: c algorithm time-complexity