Описание
Рекурсивный алгоритм решения многих задач может быть представлен в виде следующего псевдокода:
Функция T( n : размер задачи ) определена как:
if n < 1 then exit
Выполнить некоторое количество вычислений f(n)
T(n/b)
T(n/b)
...повторить a раз...
T(n/b)
конец функции
В приведенном примере алгоритм рекурсивно разделяет исходную задачу размера n на несколько новых подзадач, каждая размером n/b. Такое разбиение может быть представлено в виде дерева вызовов, в котором каждый узел соответствует рекурсивному вызову, а ветви, исходящие из узла — последующим вызовам для подзадач. Каждый узел будет иметь a ветвей. Также в каждом узле производится объём работы, соответствующий размеру текущей подзадачи n (переданному в данный вызов функции) согласно соотношению
. Общий объём работы алгоритма определяется как сумма всех работ в узлах данного дерева.
Вычислительная сложность подобных алгоритмов может быть представлена в виде рекуррентного соотношения
. Его можно решить путём многократных подстановок выражения
.[1]
С помощью основной теоремы возможно быстрое вычисление подобных соотношений, что позволяет получить асимптотическую оценку времени работы рекурсивных алгоритмов в нотации O(n) (Θ-нотации), не производя подстановок.
Общая форма
Основная теорема рассматривает следующие рекуррентные соотношения:
В применении к анализу алгоритмов константы и функции обозначают:
- n — размер задачи.
- a — количество подзадач в рекурсии.
- n/b — размер каждой подзадачи. (Предполагается, что все подзадачи на каждом этапе имеют одинаковый размер.)
- f (n) — оценка сложности работы, производимой алгоритмом вне рекурсивных вызовов. В неё также включается вычислительная стоимость деления на подзадачи и объединения результатов решения подзадач.
Основная теорема позволяет получить асимптотическую оценку для следующих трех случаев:
Вариант 1
Общая форма
Если
, и выполняется соотношение
тогда:
Пример
Согласно формуле, значения констант и сложности не рекурсивной части задачи:
, где
Затем, проверяем, выполняется ли соотношение 1 варианта:
.
Следовательно,
(Для данного примера точное решение рекуррентности даёт
, при условии
).
Вариант 2
Общая форма
Если для некоторой константы k ≥ 0 выполняется:
где
тогда:
Пример
Согласно формуле, значения констант и сложности не рекурсивной части задачи:
где
Проверяем соотношение варианта 2:
, и следовательно,
В соответствии с 2 вариантом основной теоремы:
Таким образом, рекуррентное соотношение T(n) равно Θ(n log n).
(Этот результат может быть проверен точным решением соотношения, в котором
, при условии
.)
Вариант 3
Пример
Значения констант и функции:
, где
Проверяем, что выполняется соотношение из варианта 3:
, и, следовательно,
Также выполняется соотношение regularity condition:
, при выборе
Следовательно, согласно 3 варианту основной теоремы:
Данное рекуррентное соотношение T(n) равно Θ(n2), что совпадает с f (n) в изначальной формуле.
(Этот результат подтверждается точным решением рекуррентности, в котором
, при условии
.)
Применение к некоторым алгоритмам
Алгоритм |
Рекуррентное соотношение |
Время работы |
Примечание |
Двоичный поиск |
|
|
Основная теорема, 2 вариант:
, где
[3] |
Обход бинарного дерева |
|
|
Основная теорема, 1 вариант:
где
[3] |
Алгоритм Штрассена |
|
|
Основная теорема, 1 вариант:
, где
[4] |
Optimal Sorted Matrix Search |
|
|
Теорема Akra-Bazzi для
и
для получения
|
Сортировка слиянием |
|
|
Основная теорема, 2 вариант:
, где
|
Литература
- Кормен, Т., Лейзерсон, Ч., Ривест, Р., Штайн, К. Алгоритмы: построение и анализ = 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. (англ.)
- Michael T. Goodrich and Roberto Tamassia. 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. (англ.)
- CHAPTER 5. RECURSION AND RECURRENCES 5.2 The Master Theorem, CS 21/Math 19 — Course Notes, Ken Bogart and Cliff Stein: Discrete Math in Computer Science.
Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".
Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.
Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .