[英]How to find number of comparisons and complexity of a given algorithm
我试图确定比较的总数(不计算循环的停止条件)以及复杂性如何随 N 增长。
1.
for (int ind = 0; ind < N; ind++)
{
if (arr[ind] < 0)
arr[ind] = arr[ind] * 2;
}
2.
bool there_are_duplicates = false;
for (int ind1 = 0; ind1 < N; ind1++)
{
for (int ind2 = 0; ind2 < N; ind2++)
if (ind1 != ind2 && arr[ind1] == arr[ind2])
there_are_duplicates = true;
}
3.
for (int ind = 0; ind < N; ind++)
{
int sum = 0;
int nb = 0;
for (int n = 0; n < 4; n++)
{
if (ind >= n)
{
sum = sum + arr[ind - n];
nb++;
}
}
arr[ind] = sum / nb;
}
对于第一个,复杂度是 N 并且比较次数也是 N 或者它正好等于一个?
对于第二个,复杂度是 N^2,比较次数是 2(N^2) 还是刚好等于 2?
对于第二个,复杂度是 N,比较次数也是 4N 或者它正好等于 1 或 4?
算一算:
您比较数组的每个项目,因此您有N
次比较和O(N)
复杂度
您有嵌套循环,您将每个项目(其中N
个)与所有其他项目(即N - 1
个项目)进行比较。 您有N * (N - 1)
次比较和O(N^2)
复杂度
在这里,您处理每个项目4
次。 因此,您有4 * N
比较和O(N)
复杂度
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.