Определить сложность алгоритма

51
5

Предположим, что algo (p) - это алгоритм, который принимает время Theta (p) для выполнения и не меняет p. Определите сложность времени выполнения следующего алгоритма:

Algo2(n) 
begin
p=1;
while p <= n
begin
algo(p)
p=2*p
end;
end;

На самом деле не знаю, с чего начать, я думал O (logn), возможно, с p = p * 2, но тогда в цикле while есть algo (p), и я не знаю, как это повлияло бы на вещи.

спросил(а) 2013-09-17T12:45:00+04:00 6 лет, 6 месяцев назад
1
Решение
72

Это Большая Тета (n):

Он вызывает algo(p) O (logn) раз с p = 1, 2, 4,..., 2 ^ (этаж (logn)). Это тэта (1 + 2 +... + 2 ^ (пол (logn)) = Theta (2 ^ (пол (logn + 1) -1) = Theta (n).

ответил(а) 2013-09-17T13:07:00+04:00 6 лет, 6 месяцев назад
37

Чтобы получить более легкую проблему, вы можете установить ее так:

Algo(n)
begin
p=1, i=1
while p<= n
begin
algo(p)
p=2*p
i++
end
end

которую вы можете переписать следующим образом:


Algo(n)
begin
i=1
while 2^(i-1)<=n
begin
algo(2^(i-1))
i++
end
end

Затем, как сказал Хенрик,

Он вызывает algo (p) O (logn) раз с p = 1, 2, 4,..., 2 ^ (этаж (logn)). Это тэта (1 + 2 +... + 2 ^ (пол (logn)) = Theta (2 ^ (пол (logn + 1) -1) = Theta (n).

ответил(а) 2013-09-17T12:55:00+04:00 6 лет, 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема