算法的时间复杂度

时间:2015-10-15 19:34:58

标签: java eclipse algorithm oop

我创建了两个算法来计算给定数组的前缀平均值。我想得出两种算法的时间复杂度,但我一直在苦苦挣扎。我观看了这段YouTube视频: https://www.youtube.com/watch?v=udwxWq9wZgg&safe=active。我不明白如何计算for循环和嵌套for循环中的操作。

在2:27,我设法计算PrefixAverages2中for循环中的操作。这是3n + 1。但是,从5:50开始我无法理解。

提前致谢。

public double[] PrefixAverages1(double input[])
{
    double A[] = new double[input.length];
    double s;


    for(int i=0; i <= input.length - 1 ;i++)
    {
        s = input[0];

        for(int j=1; j <= i ;j++)
        {
            s = s + input[j];
        }

        A[i] = s / (i+1);
    }


    return A;  

}





public double[] PrefixAverages2(double input[])
{
    double A[] = new double[input.length];
    double s = 0;

    for( int i=0; i <= input.length - 1 ; i++)
    {
        s = s + input[i];
        A[i] = s / (i+1);

    }

    return A;  

}

1 个答案:

答案 0 :(得分:1)

   for(int i=0; i <= input.length - 1 ;i++)
        for(int j=1; j <= i ;j++)

这是二次的,对于给定的i,内循环大约是i次,所以你必须求和i,所以基本上你有像sum_ {i = 1} ^ {i = l} i这样的东西,这是前l个整数的和,所以l(l + 1)/ 2,然后是二次。

对于第二种算法,你只需要一个循环,因此它的复杂性是线性的。