На этом шаге мы рассмотрим использование таких замен.
Предыдущее рекуррентное соотношение (3.45) можно решить, применив две последовательные замены переменной (и функции). Во-первых, замена n = 2k приводит к
__ T(2k) = 2T(√nk) + log2 2k = T(2k/2) + k.
Заменив T(2k) на t(k), получаем следующее рекуррентное соотношение:
t(k) = 2t(k/2) + k,
t(2m) = 2t(2m-1) + 2m,
u(m) = 2u(m - 1) + 2m.
u(m) = C12m + C2m2m.
Отмена последней замены переменной приводит к
t(k) = C1k + C2(log2(k))k
T(n) = C1 log2 n + C2(log2(log2 n))log2 n,
Стратегия применения нескольких замен переменных или функций может использоваться для решения более сложных рекуррентных соотношений, таких, например, как следующее нелинейное соотношение:
1/3, если = 1 T (n) = nT(n/2)2, если n > 1,
T(2k) = 2kT(2k/2)2 = 2kT(2k-1)2.
После замены функции T(2k) = t(k) получаем
t(k) = 2kt(k - 1)2,
log2 t(k) = log2 2kt(k - 1)2 = k + 2log2 t(k - 1)
u(k) = k + 2u(k - 1),
(x - 2)(x - 1)2,
u(k) = C12k + C2 + C3k.
Отменив замены, получим сначала
t(k) = 2C12k + C2 + C3k,
T(n) = 2C1n + C2 + C3log2 n.
Последний шаг, как обычно, состоит из определения констант. Используя начальное условие T(1) = 1/3, получаем T(2) = 2[T(1)]2 = 2/9 и T(4) = 4[T(2)]2 = 4(2/9)2 = 16/81. Воспользуемся этими значениями для составления следующей системы (нелинейных) уравнений:
2С1+С2 = 1/3 = T(1) 22Cl+C2+С3 = 2/9 = T(2) , 24Cl+C2+2С3 = 16/81 = T(4)
C1 + C2 = -log23 2C1 + C2 + C3 = 1 - log29 = 1 - 2log23 . 4C1 + C2 + 2C3 = 4 - log281 = 4 - 4log23.
Её решение:
C1 = 2 - log2 3 = log2(4/3), C2 = -2, C3 = -1.
Таким образом, T(n) можно выразить следующей формулой:
T(n) = 2(log2(4/3))n - 2 - log2n = 2log2(4/3)n * 2-2 * 2log2(1/n) = (4/3)n(1/4)n ∈ Θ((4/3)nn).
Со следующего шага мы начнем рассматривать основные алгоритмы линейной рекурсии.