如何解决这段代码在 Theta 符号中的运行时间是多少?
我在运行时分析方面有点挣扎,想看看这些是否正确。 如果有人能指出我是否犯了任何错误,我将不胜感激。
void f1(int* arr,int n){
for (int i = n; i > 0; i--) ---> time complexity = n
reverseArray(arr,i);
}
void reverseArray(int* arr,int n){
int left,right,temp;
for (left = 0,right = n-1; left <= right; left++,right--){ ---> time complexity = n
temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
}
}
对于 f1:T(n) = n * n = O(n^2)
int f2(int n){
int i,j,c;
arr = new int[n];
for (i = 0; i < n; i++) ---> time complexity = n
arr[i] = 7;
c = 0;
for (i = 0; i < n; i++) ---> time complexity = n
for (j = 1; j <= arr[i]; j++) ---> time complexity = n
c++;
delete []arr;
return c;
}
对于 f2:T(n) = n + n^2 = O(n^2)
解决方法
f1 的时间复杂度是正确的。
但是在 f2 中,
for (i = 0; i < n; i++) ---> time complexity = n
for (j = 1; j <= arr[i]; j++) ---> time complexity = n
c++;
对于每个 i,第二个 for 循环正好运行 a[i] 次,但是您已经在前一个 for 循环中初始化了 arr[i] = 7;
。
for (i = 0; i < n; i++) ---> time complexity = n
arr[i] = 7;
这意味着第二个 for 循环,
for (j = 1; j <= arr[i]; j++) ---> time complexity = n
c++;
对每个 i 运行 7 次,导致 7*n 次操作。
因此 f2 的总时间复杂度为 O( n + 7*n) = O(n)
int f2(int n){
int i,j,c;
arr = new int[n];
for (i = 0; i < n; i++) ---> time complexity = n
arr[i] = 7;
c = 0;
for (i = 0; i < n; i++) ---> time complexity = n
for (j = 1; j <= arr[i]; j++) ---> time complexity is 7,i.e O(1).
c++;
delete []arr;
return c;
}
对于 f2:T(n) = O(n) + O(n) * O(1) = O(n)。
可以使用任何数字而不是 7,不管这个常数,内循环的时间复杂度为 O(1)。如果 7 不是常数,而是函数 int f2(int n,int m)
的参数 m,则时间复杂度为 O(m),总和为 O(n*m)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。