Анализ итераций цикла

Смотрите решение ниже, я хотел бы получить конструктивный отзыв.

каково время работы в O (n) ниже.

int a = 0;
int k = n*n*n; //n^3
while(k > 1) 
{
  for (int j=0; j<k; j++) //runs from 0->k
  { a--; }
k = k/2; //divides by 2 each iteration
}

каждый раз, когда цикл for выполняется, он дает константу x k.

= 0xn^3 + 1x (n^3/2) + 2x(n^3/4) +...+ nx(n^3/2^n)
= n^3 (0 + 1/2 + 2/4 +...+ n/2^n) ‹- кто-нибудь знает, как я могу упростить это еще больше?

Изменить: я предполагаю, что мы каким-то образом будем использовать арифметический ряд....


person warpstar    schedule 20.06.2012    source источник
comment
Ваши рассуждения ошибочны: последовательность не 0xn^3 + 1x(n^3/2) + 2x(n^3/4) +..., а скорее 1xn^3 + 1x(n^3/2) ) + 1x(n ^ 3/4) + ... = n ^ 3 x (1 + 1/2 + 1/4 + 1/8 + ...) = 2xn ^ 3.   -  person Daniel Wagner    schedule 20.06.2012


Ответы (2)


Давайте сначала используем k

в первом цикле while цикл for выполняется k раз

во втором цикле while цикл for выполняется k/2 раза

в третьем цикле while цикл for выполняется k/4 раза

...

так что всего он выполняется ( k + k/2 + k/4 + k/8 + ... + 1) раз

после извлечения k это k * ( 1 + 1/2 + 1/4 + 1/8 + ... + 1/k)

по мере увеличения k часть в скобках становится равной 2, что мы можем игнорировать

измените k на n ^ 3, результат будет O (n ^ 3)

person xvatar    schedule 20.06.2012
comment
кажется, вы действительно не принимаете во внимание вложенный цикл for? почему вы умножаете ( 1 + 1/2 + 1/4 + 1/8 + ... + 1/k) на → k? - person warpstar; 20.06.2012
comment
хорошо, глупая арифметическая ошибка, но это все еще не объясняет, что вы не принимаете во внимание вложенный цикл for, верно? поэтому для каждого значения 1 + 1/2 + 1/4 + 1/8 +... + 1/k вы также должны учитывать время выполнения цикла for. (что, кажется, вы не сделали) ... поправьте меня, если я ошибаюсь. - person warpstar; 20.06.2012
comment
@warpstar в каждом цикле while, я считаю, сколько раз повторяется цикл for, см. мою строку со 2-й по 4-ю - person xvatar; 20.06.2012

Я думаю, вы можете придумать порядок роста сложности с помощью следующего формального уравнения ниже:

введите здесь описание изображения

person Mohamed Ennahdi El Idrissi    schedule 05.04.2014