Найдите вычислительную сложность для следующих циклов

code

For n=1 : Inner loop will execute 1 time.
For n=2 : Inner loop will execute 1+2 times.
For n=4 : Inner loop will execute 1+2+4 times.
For n=8 : Inner loop will execute 1+2+4+8 times.

. . .

Итак, как я могу найти вычислительную сложность?

Мой ответ: количество итераций внутреннего цикла = n+(n/2)+(n/4)+(n/8)+...+(n/n)


person Ammar Alyousfi    schedule 08.11.2013    source источник
comment
Разве не следует читать For n=1,2,3,4 вместо For n=1,2,4,8? И тогда количество выполненных операций равно 2 ^ n-1?   -  person halfbit    schedule 08.11.2013
comment
Я выбираю n=1,2,4,8... чтобы было проще найти сложность, потому что i=i*2. Я не знаю!   -  person Ammar Alyousfi    schedule 08.11.2013


Ответы (2)


Общая временная сложность равна (n). Чтобы увидеть это, обратите внимание, что внутренний цикл (i) работает на итерации и что i принимает значения 1, 2, 4, 8, 16, 32, ..., 2log n . Если суммировать это, используя формулу суммы геометрического ряда, то получим

1 + 2 + 4 + 8 + ... + 2log n = 2log n + 1 - 1 = 2 2log n - 1 = 2n - 1

Таким образом, общая проделанная работа равна (n).

Надеюсь это поможет!

person templatetypedef    schedule 09.11.2013
comment
Спасибо. Но почему 2^logn, а не n? - person Ammar Alyousfi; 09.11.2013
comment
@ammarx- Если мы используем логарифмы по основанию 2, они идентичны. - person templatetypedef; 09.11.2013

Вы можете формально действовать следующим образом, чтобы получить как точное количество инструкций, которые будут выполняться, так и порядок роста:

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

person Mohamed Ennahdi El Idrissi    schedule 11.04.2014