Какую сложность имеет следующий алгоритм? - PullRequest
0 голосов
/ 13 апреля 2019

Что такое сложность следующего кода?

public static int foo(int[] a){
        int[] b  = new int[a.length];

        for(int i = 0; i < a.length; ++i){
            for(int j = 0; j < b.length / 100; ++j ){
                b[i] += a[i] + a[j];
            }
        }

        int result = 0;
        for(int i = 0; i < b.length; i++ ){
            result += b[i];
        }
        return result;
   }

Ответы [ 2 ]

0 голосов
/ 13 апреля 2019
public static int foo(int[] a){
    // O(1)
    int[] b  = new int[a.length];

    // O(a.length x a .length)
    for(int i = 0; i < a.length; ++i){
        // O(a.length)
        for(int j = 0; j < b.length / 100; ++j ){
            b[i] += a[i] + a[j];
        }
    }

    // O(1)
    int result = 0;

    // O(a.length)
    for(int i = 0; i < b.length; i++ ){
        result += b[i];
    }
    return result;

}

Допустим, a имеет размер n, всего: O(n^2) + O(n) = O(n^2)

0 голосов
/ 13 апреля 2019

Я думаю, что это будет:

O(1) + O(n)*O(n/100) + O(n) = O(1) + O(n^2/100) + O(n)

Таким образом, общая сложность составляет ~O(n^2)

...