Основная теорема о рекуррентных соотношениях

Материал из testwiki
Перейти к навигации Перейти к поиску

Основная теорема о рекуррентных соотношениях используется в анализе алгоритмов для получения асимптотической оценки рекурсивных соотношений (рекуррентных уравнений), часто возникающих при анализе алгоритмов типа «разделяй и властвуй», например, при оценке времени их выполнения. Теорема была введена и доказана Джоном Бентли, Доротеном Хакеном и Джеймсом Хакеном в 1980 году. Теорема была популяризована в книге Алгоритмы: построение и анализ (Томас Кормен, Чарльз Лейзерстон, Рональд Ривест, Клиффорд Штайн), в которой она была приведена.

Не все рекурсивные соотношения могут быть решены с помощью основной теоремы. Существует несколько её обобщений, в том числе Шаблон:Iw.

Описание

Рассмотрим задачу, которую можно решить рекурсивным алгоритмом:

function T(input n: размер задачи):
  if n < некоторая константа k:
    решить задачу относительно n нерекурсивно
  else:
    определить множество из a подзадач, каждая размера n/b
    вызвать функцию T рекурсивно для каждой подзадачи
    объединить решения
end
Дерево решений

В приведённом примере алгоритм рекурсивно разделяет исходную задачу размера n на несколько новых подзадач, каждая размером n/b. Такое разбиение может быть представлено в виде дерева вызовов, в котором каждый узел соответствует рекурсивному вызову, а ветви, исходящие из узла — последующим вызовам для подзадач. Каждый узел будет иметь a ветвей. Также в каждом узле производится объём работы, соответствующий размеру текущей подзадачи n (переданному в данный вызов функции) согласно соотношению f(n). Общий объём работы алгоритма определяется как сумма всех работ в узлах данного дерева.

Вычислительная сложность подобных алгоритмов может быть представлена в виде рекуррентного соотношения T(n)=aT(nb)+f(n). Его можно решить путём многократных подстановок выражения T(nb).[1]

С помощью основной теоремы возможно быстрое вычисление подобных соотношений, что позволяет получить асимптотическую оценку времени работы рекурсивных алгоритмов в нотации O(n) (Θ-нотации), не производя подстановок.

Общая форма

Основная теорема рассматривает следующие рекуррентные соотношения:

T(n)=aT(nb)+f(n),гдеa1, b>1.

В применении к анализу алгоритмов константы и функции обозначают:

n — размер задачи.
a — количество подзадач в рекурсии.
n/b — размер каждой подзадачи. (Предполагается, что все подзадачи на каждом этапе имеют одинаковый размер.)
f (n) — оценка сложности работы, производимой алгоритмом вне рекурсивных вызовов. В неё также включается вычислительная стоимость деления на подзадачи и объединения результатов решения подзадач.

Основная теорема позволяет получить асимптотическую оценку для следующих трёх случаев:

Вариант 1

Общая форма

Если f(n)=O(nc), и выполняется соотношение c<logba, тогда:

T(n)=Θ(nlogba).

Пример

T(n)=8T(n2)+1000n2.

Согласно формуле, значения констант и сложности нерекурсивной части задачи:

a=8, b=2, f(n)=1000n2,
f(n)=O(nc), где c=2.

Затем проверяем, выполняется ли соотношение 1-го варианта:

logba=log28=3>c.

Следовательно,

T(n)=Θ(nlogba)=Θ(n3).

(Для данного примера точное решение рекуррентности даёт T(n)=1001n31000n2, при условии T(1)=1.)

Вариант 2

Общая форма

Если для некоторой константы k0 выполняется

f(n)=Θ(nclogkn), где c=logba.

Тогда

T(n)=Θ(nclogk+1n).

Пример

T(n)=2T(n2)+10n.

Согласно формуле, значения констант и сложности не рекурсивной части задачи:

a=2, b=2, c=1, f(n)=10n,
f(n)=Θ(nclogkn), где c=1, k=0.

Проверяем соотношение варианта 2:

logba=log22=1, и следовательно, c=logba.

В соответствии с 2-м вариантом основной теоремы,

T(n)=Θ(nlogbalogk+1n)=Θ(n1log1n)=Θ(nlogn).

Таким образом, рекуррентное соотношение T(n) равно Θ(n log n).

(Этот результат может быть проверен точным решением соотношения, в котором T(n)=n+10nlog2n, при условии T(1)=1.)

Вариант 3

Общая форма

Если выполняется

f(n)=Ω(nc), где c>logba,

а также верно, что

af(nb)kf(n) для некоторой константы k<1 и достаточно больших n (так называемое условие регулярности), тогда
T(n)=Θ(f(n)).

Пример

T(n)=2T(n2)+n2.

Значения констант и функции:

a=2, b=2, f(n)=n2,
f(n)=Ω(nc), где c=2.

Проверяем, что выполняется соотношение из варианта 3:

logba=log22=1, и, следовательно, c>logba.

Также выполняется условие регулярности:

2(n24)kn2 при выборе k=1/2.

Следовательно, согласно 3-му варианту основной теоремы,

T(n)=Θ(f(n))=Θ(n2).

Данное рекуррентное соотношение T(n) равно Θ(n2), что совпадает с f(n) в изначальной формуле.

(Этот результат подтверждается точным решением рекуррентности, в котором T(n)=2n2n, при условии T(1)=1.)

Выражения, не решаемые основной теоремой

Следующие соотношения не могут быть решены с применением основной теоремы:[2]

  • T(n)=2nT(n2)+nn.
    a не является константой, для основной теоремы требуется постоянное количество подзадач.
  • T(n)=2T(n2)+nlogn.
    Между f(n) и nlogba существует неполиномиальная зависимость.
  • T(n)=0,5T(n2)+n.
    a < 1, но основная теорема требует наличия хотя бы одной подзадачи.
  • T(n)=64T(n8)n2logn.
    f(n) является отрицательной величиной.
  • T(n)=T(n2)+n(2cosn).
    Близко к варианту 3, но не выполняется условие регулярности.

Во втором примере разница между f(n) и nlogba может быть выражена соотношением f(n)nlogba=nlognnlog22=nnlogn=1logn. Из него видно, что 1logn<nε для любой константы ε>0. Следовательно, разница не является полиномом, и основная теорема неприменима.

Применение к некоторым алгоритмам

Алгоритм Рекуррентное соотношение Время работы Примечание
Двоичный поиск T(n)=T(n2)+O(1) O(logn) Основная теорема, 2 вариант: c=logba, где a=1,b=2,c=0,k=0[3]
Обход двоичного дерева T(n)=2T(n2)+O(1) O(n) Основная теорема, 1 вариант: c<logba где a=2,b=2,c=0[3]
Алгоритм Штрассена T(n)=7T(n2)+O(n2) O(nlog27)O(n2,81) Основная теорема, 1 вариант: c<logba, где a=7,b=2,c=2[4]
Шаблон:Lang-en2 T(n)=2T(n2)+O(logn) O(n) Теорема Акра-Баззи для p=1 и g(u)=log(u) для получения Θ(2nlogn)
Сортировка слиянием T(n)=2T(n2)+O(n) O(nlogn) Основная теорема, 2 вариант: c=logba, где a=2,b=2,c=1,k=0

См. также

Примечания

Шаблон:Примечания

Литература