【发布时间】:2020-03-15 13:29:59
【问题描述】:
所有这三种算法只是计算大小为 10 的数组的总和。在这里,我对时间复杂度和我想要哪个更快。你能帮我理解一下时间复杂度吗?
算法 1
在算法 1 中,循环运行了 10 次。
int arr[10] = {1, 2, 3, 4, 5 ,6 ,7, 8, 9, 10};
int sum = 0;
int size = 10;
int i = 0;
for(int i = 0; i < size; i++){
sum += arr[i];
}
cout<<sum;
算法 2
在算法 2 中,循环运行的是数组大小的一半,但在每次迭代中它执行双倍操作。减少迭代次数会让算法更快吗?
int arr[10] = {1, 2, 3, 4, 5 ,6 ,7, 8, 9, 10};
int sum = 0;
int size = 10;
int i = 0;
for(int i = 0; i < size/2; i++){
sum += arr[i];
sum += arr[size-1-i];
}
cout<<sum;
算法 3
int arr[10] = {1, 2, 3, 4, 5 ,6 ,7, 8, 9, 10};
int sum = 0;
int size = 10;
int i = 0;
for(i = 0; i < size/2; i++){
sum += arr[i];
}
for(int j = i; j < size; j++){
sum += arr[j];
}
cout<<sum;
【问题讨论】:
-
请注意,时间复杂度与实时性没有直接关系。尽管它们都具有相同的复杂性,但它们可能具有不同的现实世界性能。这两件事不应该混为一谈。所以问“哪个更快”是相当困难的,如果不是不可能回答的话,并且与大哦无关