На этом шаге мы рассмотрим эту теорему.
Основная теорема (master theorem) может использоваться в качестве быстрого способа определения временнОй сложности вычисления алгоритмов, основанных на стратегии "разделяй и властвуй". В частности, её можно применить к рекуррентным соотношениям следующего вида:
c, если n = 1
T(n) =
aT(n/b) + f (n), если n > 1,
Например, для
1, если n = 1
T(n) =
T(n/2) + 2n, если n > 1
Если f(n) - полином степени k, то можно воспользоваться следующей более простой версией основной теоремы:
Θ(nk), если a * bk < 1
T(n) ∈ Θ(nk log n), если a * bk = 1 (3.28)
Θ(n logb a), если a * bk > 1
Этот результат может быть получен методом расширения. Рассмотрим следующее рекуррентное соотношение:
c, если n = 1
T(n) = (3.29)
aT(n/b) + d * nk, если n > 1
T(n) = aT(n/b) + dnk = a[aT(n/b2) + d(n/b)k] + dnk =
= a2T(n/b2) + dnk(1 + a/bk) = a2[aT(n/b3) + d(n/b2)k] + dnk(1 + a/bk) =
= a3T(n/b3) + dnk(1 + a/bk + a2/b2k) =
. . . .
i-1
= aiT(n/bi) + dnk ∑ (a / bk)j.
j=1
Начальное условие T(1) = c достигается при i = logb n, а подстановка этого значения в формулу даёт:
logbn-1 logbn-1
T(n) = c * alogbn + d * nk ∑ (a / bk)j = c * nlogba + d * nk ∑ (a / bk)j ,
j=0 j=0
logbn-1
∑ (a / bk)j
j=0
∞
∑ ri = 1 / (r - 1) -
i=0
Таким образом, в этом случае
T(n) = c * nlogba + dKnk
T(n) ∈ Θ(nk) .
logbn-1
T(n) = c * nk + d * nk ∑ 1 = c * nk + d * nk logb n ,
j=0
T(n) ∈ Θ(nk log n) .
T(n) = c * nlogba + dnk((a/bk)logbn - 1))/(a/bk - 1) =
= c * nlogba + dnk(nlogba/nk - 1) K =
= (c + dK) nlogba - dKnk,
T(n) ∈ Θ(nlogba) .
На следующем шаге мы рассмотрим дополнительные примеры.