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

Arrays 如何找到给定算法的比较次数和复杂性,arrays,c,algorithm,time-complexity,Arrays,C,Algorithm,Time Complexity,我试图确定比较的总数(不计算循环的停止条件)以及复杂度如何随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增长

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;
}

1。
对于(int ind=0;ind=n)
{
sum=sum+arr[ind-n];
nb++;
}
}
arr[ind]=总和/nb;
}
对于第一个,复杂度为N,比较次数也为N或仅等于1

对于第二个,复杂性为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)
    复杂性


  • 谢谢,这个如何?(int [IND=0;IND]<0 & & [IND]>20和& [IND] %=2=0)ARR[IND]=ARR[IND] +ARR[IND/2 ];}约旦:再次测试每一项:<代码> N< /代码>比较,<代码> O(n)< /代码>复杂性抱歉,我们不认为IF语句中有3个比较,被调用N次,所以比较的次数是3N?@Jordan:我们只有一个
    if
    和一个条件(当然可能很复杂);如果您想计算术语
    arr[ind]<0
    arr[ind]>20
    等。最坏的情况是
    3*N
    ,最好的情况是
    N