Определение сложности с учетом кодов

Учитывая фрагмент кода, как вы будете определять сложности в целом. Я очень запутался в вопросах Big O . Например, очень простой вопрос:

for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
        System.out.println("*");
    }
}

TA объяснил это чем-то вроде комбинаций. Например, n выберите 2 = (n (n-1)) / 2 = n ^ 2 + 0,5, затем удалите константу, чтобы он становится n ^ 2. Я могу поместить значения int test и попробовать, но откуда здесь взялась эта комбинация?

Что, если есть оператор if? Как определяется сложность?

for (int i = 0; i < n; i++) {
    if (i % 2 ==0) {
        for (int j = i; j < n; j++) { ... }
    } else {
        for (int j = 0; j < i; j++) { ... }
    }
}

Тогда как насчет рекурсии ...

int fib(int a, int b, int n) {
    if (n == 3) {
        return a + b;
    } else {
        return fib(b, a+b, n-1);
    }
}
34
задан prapin 27 December 2012 в 17:24
поделиться