вычислите сложность алгоритма с помощью обратной подстановки

#algorithm #recursion #time-complexity

Вопрос:

У меня есть функция :

 int ps (int n) 
{ if (n == 1) return 1; 
 else return (Extra(n)   Ps (n/4)   Ps (n/4)); } 
 

Дополнительный(n) — это O(n)

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

Ответ №1:

Во-первых, вы ошибаетесь с точки зрения сложности. Вы не упомянули Extra(n) в письменном виде о сложности времени. Так, T(n) = 2 T(n/4) n . Теперь я думаю, что новый термин рекуррентной сложности легко решить путем подстановки:

 T(n) = 2T(n/4)   n = 2 (2 T(n/8)   n/4)   n = 2^2 T(n/8)   n/2   n =
2^2 (2 T(n/16)   n/8)   n/2   n = 2^3 T(n/16)   n/4   n/2   n
 

Теперь, с помощью математической индукции, если мы предположим n = 2^k , что вы можете найти, что:

 T(n) = n   n/2   n/4   n/8   ...   n/2^k = n (1   1/2   1/4   ...   1/2^k) <= 2n
 

Последняя часть приведенного выше анализа исходит из геометрического ряда суммы с коэффициентом 1/2 . Следовательно, T(n) находится в Theta(n) и. O(n)