如何计算这种复杂性?

时间:2015-02-07 19:53:33

标签: c algorithm time-complexity

#include <stdio.h>
#include <stdlib.h>
int max (int A[], int c, int d);

int main (void)
{
    int i = 0;
    int j = 0;
    int A[3] = {-95,52,3};
    int B[3][3];
    for( i = 0; i < 3; i++)
    {
        for(j = 0; j < 3; j++)
        {
            if(j < i)
            {
                B[i][j] = 0;
            }
            else
            {
                B[i][j] = max(A,i,j); 
            }
        }
    }



}

int max(int A[],int c,int d)
{
    int i = 0;
    int j = 0;
    int max = -100;

    for (i=c; i <= d; i++)
    {
        if(max < A[i])
        { 
            max = A[i];
        }
    }
    return max; 
}

我不了解如何计算复杂性。我认为这是n ^ 2,但我不知道为什么会这样。

该程序采用单个数组,并根据从i到j的最大值创建一个双数组。输出正确。

2 个答案:

答案 0 :(得分:2)

假设n表示A数组的大小以及B的两个维度,您基本上已经嵌套了 3个 -loops,其中一个“外包”到max函数中。

在最糟糕的情况下(当c0dn-1时),每个元素都会运行n元素。

因此,您的复杂性为O(n^3)

答案 1 :(得分:0)

因此,您有两个外部for循环(ij),每个循环遍历n个元素。如果j<i您只是执行O(1)操作,但如果i<=j则完成maxj-i+1此函数具有另一个for循环,它在i个元素上运行。由于我们知道jn都受n约束,因此最多只有O(n^3)个元素。

我们可以简单地通过索引变量的总和来分析嵌套的for循环:

enter image description here

因此,该算法总共具有{{1}}的最坏情况复杂度。