Примените основную теорему о T(n) = T(n/2) + n

Я просто пробовал свои силы в основной теореме и немного запутался, когда пытался оценить T(n) = T(n/2) + n. Используя основную теорему, ответ оценивается как O(n).

Но просто пройдите приведенный ниже код:

fun(n)
{
    if(n == 1)
        return ;
    for(int i=1;i<=n;i++)
    {
        printf("*");
    }
    fun(n/2);
}

Уравнение рекурсии для приведенного выше кода имеет вид T(n) = T(n/2) + n. Таким образом, временная сложность для вышеуказанной программы должна быть O(n).

Но если вы мыслите логически, то количество раз, которое программа запускает, равно: n+n/2+n/4+n/8+...... = nlogn. Таким образом, логически сложность времени для вышеуказанной программы должна быть O(nlogn).

Я очень смущен сейчас. Может кто-нибудь помочь мне, где я неправильно понимаю?

1 ответ

Нет, серия оценивается в 2n.

n + n / 2 + n / 4 + n / 8 +...... = 2n

Но если бы вы имели T(n) = 2T(n/2) + n, то это было бы O( n log n)

Другие вопросы по тегам