function T(input n: размер задачи):
if n < некоторая константа k:
решить задачу относительно n нерекурсивно
else:
определить множество из a подзадач, каждая размера n/b
вызвать функцию T рекурсивно для каждой подзадачи
объединить решения
end
В приведённом примере алгоритм рекурсивно разделяет исходную задачу размера
n
на несколько новых подзадач, каждая размером
n
/
b
. Такое разбиение может быть представлено в виде дерева вызовов, в котором каждый узел соответствует рекурсивному вызову, а ветви, исходящие из узла — последующим вызовам для подзадач. Каждый узел будет иметь
a
ветвей. Также в каждом узле производится объём работы, соответствующий размеру текущей подзадачи
n
(переданному в данный вызов функции) согласно соотношению
. Общий объём работы алгоритма определяется как сумма всех работ в узлах данного дерева.
Вычислительная сложность подобных алгоритмов может быть представлена в виде рекуррентного соотношения
. Его можно решить путём многократных подстановок выражения
.
С помощью основной теоремы возможно быстрое вычисление подобных соотношений, что позволяет получить асимптотическую оценку времени работы рекурсивных алгоритмов в
нотации
O
(
n
)
(Θ-нотации), не производя подстановок.
Общая форма
Основная теорема рассматривает следующие рекуррентные соотношения:
В применении к анализу алгоритмов константы и функции обозначают:
n
— размер задачи.
a
— количество подзадач в рекурсии.
n
/
b
— размер каждой подзадачи. (Предполагается, что все подзадачи на каждом этапе имеют одинаковый размер.)
f
(
n
) — оценка сложности работы, производимой алгоритмом вне рекурсивных вызовов. В неё также включается вычислительная стоимость деления на подзадачи и объединения результатов решения подзадач.
Основная теорема позволяет получить асимптотическую оценку для следующих трёх случаев:
Вариант 1
Общая форма
Если
, и выполняется соотношение
, тогда:
Пример
Согласно формуле, значения констант и сложности нерекурсивной части задачи:
, где
.
Затем проверяем, выполняется ли соотношение 1-го варианта:
.
Следовательно,
(Для данного примера точное решение рекуррентности даёт
, при условии
.)
Вариант 2
Общая форма
Если для некоторой константы
выполняется
, где
.
Тогда
Пример
Согласно формуле, значения констант и сложности не рекурсивной части задачи:
, где
.
Проверяем соотношение варианта 2:
, и следовательно,
.
В соответствии с 2-м вариантом основной теоремы,
Таким образом, рекуррентное соотношение
T
(
n
) равно Θ(
n
log
n
).
(Этот результат может быть проверен точным решением соотношения, в котором
, при условии
.)
Вариант 3
Общая форма
Если выполняется
, где
,
а также верно, что
для некоторой константы
и достаточно больших
(так называемое условие регулярности), тогда
Пример
Значения констант и функции:
, где
.
Проверяем, что выполняется соотношение из варианта 3:
, и, следовательно,
.
Также выполняется условие регулярности:
при выборе
.
Следовательно, согласно 3-му варианту основной теоремы,
Данное рекуррентное соотношение
T
(
n
) равно Θ(
n
2
), что совпадает с
f
(
n
) в изначальной формуле.
(Этот результат подтверждается точным решением рекуррентности, в котором
, при условии
.)
Выражения, не решаемые основной теоремой
Следующие соотношения не могут быть решены с применением основной теоремы:
a
не является константой, для основной теоремы требуется постоянное количество подзадач.
Между
f
(
n
) и
существует неполиномиальная зависимость.
a
< 1, но основная теорема требует наличия хотя бы одной подзадачи.
f
(
n
) является отрицательной величиной.
Близко к варианту 3, но не выполняется условие регулярности.
Во втором примере разница между
и
может быть выражена соотношением
Из него видно, что
для любой константы
. Следовательно, разница не является полиномом, и основная теорема неприменима.
(неопр.)
. Дата обращения: 19 августа 2016.
18 апреля 2016 года.
Литература
Кормен, Т., Лейзерсон, Ч., Ривест, Р., Штайн, К.
Алгоритмы: построение и анализ = Introduction to Algorithms. — 2-е. —
М.
: Вильямс, 2005. — 1296 с. —
ISBN 5-8459-0857-4
.
Главы 4.3 (основная теорема) и 4.4 (доказательство)
Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L.; Stein, Clifford.
Introduction to Algorithms. — 2nd. — MIT Press and McGraw-Hill, 2001. —
ISBN 0-262-53196-8
.
Sections 4.3 (The master method) and 4.4 (Proof of the master theorem), pp. 73-90.
(англ.)
and
.
Algorithm Design: Foundation, Analysis, and Internet Examples
. Wiley, 2002.
ISBN 0-471-38365-1
. The master theorem (including the version of Case 2 included here, which is stronger than the one from CLRS) is on pp. 268—270.
(англ.)
от 21 апреля 2017 на
Wayback Machine
,
от 21 июля 2010 на
Wayback Machine
, Ken Bogart and Cliff Stein: Discrete Math in Computer Science.