繁体   English   中英

如何找到给定算法的比较次数和复杂度

[英]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?

算一算:

  1. 您比较数组的每个项目,因此您有N次比较和O(N)复杂度

  2. 您有嵌套循环,您将每个项目(其中N个)与所有其他项目(即N - 1个项目)进行比较。 您有N * (N - 1)次比较和O(N^2)复杂度

  3. 在这里,您处理每个项目4次。 因此,您有4 * N比较和O(N)复杂度

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM