Не все рекуррентные соотношения могут быть решены с помощью этой теоремы; ее обобщения включают метод Акра–Бацци .
Введение
Рассмотрим задачу, которую можно решить с помощью рекурсивного алгоритма, например следующего:
процедура p(вход x размера n ): если n < некоторая константа k : Решить x напрямую, без рекурсии, иначе : Создайте подзадачи x , каждая из которых имеет размер n / b. Вызовите процедуру p рекурсивно для каждой подзадачи. Объединить результаты подзадач
Приведенный выше алгоритм рекурсивно делит задачу на ряд подзадач, каждая из которых имеет размер n / b . Его дерево решений имеет узел для каждого рекурсивного вызова, причем дочерние элементы этого узла являются другими вызовами, сделанными из этого вызова. Листья дерева являются базовыми случаями рекурсии, подзадачи (размером меньше k ), которые не рекурсивны. Приведенный выше пример будет иметь дочерние узлы в каждом нелистовом узле. Каждый узел выполняет объем работы, который соответствует размеру подзадачи n , переданной этому экземпляру рекурсивного вызова и заданной как . Общий объем работы, выполненной всем алгоритмом, является суммой работы, выполненной всеми узлами в дереве.
Время выполнения алгоритма, такого как p выше, на входе размера n , обычно обозначаемого , можно выразить рекуррентным соотношением
где — время создания подзадач и объединения их результатов в вышеописанной процедуре. Это уравнение можно последовательно подставить само в себя и расширить, чтобы получить выражение для общего объема проделанной работы. [2] Основная теорема позволяет преобразовать многие рекуррентные соотношения этой формы в Θ-обозначение напрямую, без выполнения расширения рекурсивного соотношения.
Общая форма
Основная теорема всегда дает асимптотически точные границы для рекуррентных последовательностей из алгоритмов «разделяй и властвуй» , которые разделяют входные данные на меньшие подзадачи одинакового размера, решают подзадачи рекурсивно, а затем объединяют решения подзадач, чтобы получить решение исходной задачи. Время для такого алгоритма можно выразить, сложив работу, которую они выполняют на верхнем уровне своей рекурсии (чтобы разделить задачи на подзадачи, а затем объединить решения подзадач), вместе со временем, затраченным на рекурсивные вызовы алгоритма. Если обозначает общее время для алгоритма на входных данных размера , а обозначает количество времени, затраченного на верхнем уровне рекуррентности, то время можно выразить с помощью рекуррентного соотношения , которое принимает вид:
Здесь — размер входной задачи, — количество подзадач в рекурсии, — коэффициент, на который уменьшается размер подзадачи при каждом рекурсивном вызове ( ). Важно, что и не должно зависеть от . Теорема ниже также предполагает, что в качестве базового случая для рекурсии, когда меньше некоторой границы , наименьший размер входных данных, который приведет к рекурсивному вызову.
Рекуррентные соотношения этой формы часто удовлетворяют одному из трех следующих режимов, в зависимости от того, как работа по разделению/рекомбинации задачи соотносится с критическим показателем . (В таблице ниже используется стандартная нотация «большое О» ).
Полезное расширение случая 2 обрабатывает все значения : [3]
Примеры
Пример случая 1
Как видно из формулы выше:
, так
, где
Далее посмотрим, удовлетворяем ли мы условию случая 1:
.
Из первого случая основной теоремы следует, что
(Этот результат подтверждается точным решением рекуррентного соотношения, которое равно , при условии ).
Пример случая 2
Как мы видим в приведенной выше формуле, переменные получают следующие значения:
где
Далее посмотрим, удовлетворяем ли мы условию случая 2:
, и, следовательно, c и равны
Итак, из второго случая основной теоремы следует:
Таким образом, данное рекуррентное соотношение было в .
(Этот результат подтверждается точным решением рекуррентного соотношения, которое равно , при условии ).
Пример случая 3
Как мы видим в приведенной выше формуле, переменные получают следующие значения:
, где
Далее посмотрим, удовлетворяем ли мы условию случая 3:
, и поэтому, да,
Условие регулярности также выполняется:
, выбирая
Итак, из третьего случая основной теоремы следует:
Таким образом, данное рекуррентное соотношение оказалось в , что соответствует исходной формуле.
(Этот результат подтверждается точным решением рекуррентного соотношения, которое равно , при условии .)
Недопустимые уравнения
Следующие уравнения не могут быть решены с помощью основной теоремы: [4]
a не является константой; количество подзадач должно быть фиксированным
неполиномиальная разность между и (см. ниже; применяется расширенная версия)
, что является временем комбинирования, не является положительным
случай 3, но нарушение закономерности.
Во втором недопустимом примере выше разница между и может быть выражена отношением . Очевидно, что для любой константы . Следовательно, разница не является полиномиальной, и основная форма Основной теоремы неприменима. Расширенная форма (случай 2b) применима, давая решение .
^ Бентли, Джон Луис ; Хакен, Доротея ; Сакс, Джеймс Б. (сентябрь 1980 г.), «Общий метод решения повторяющихся задач «разделяй и властвуй»», ACM SIGACT News , 12 (3): 36–44, doi : 10.1145/1008861.1008865, S2CID 40642274, архивировано из оригинала 22 сентября 2017 г.
^ Университет Дьюка, «Большое О для рекурсивных функций: рекуррентные соотношения», http://www.cs.duke.edu/~ola/ap/recurrence.html
^
Чи Яп, Настоящий элементарный подход к основной рекуррентности и обобщениям, Труды 8-й ежегодной конференции по теории и приложениям моделей вычислений (TAMC'11), страницы 14–26, 2011. Электронная копия.
^ Массачусетский технологический институт (MIT), «Основная теорема: практические проблемы и решения», https://people.csail.mit.edu/thies/6.046-web/master.pdf
^ ab Дартмутский колледж, http://www.math.dartmouth.edu/archive/m19w03/public_html/Section5-2.pdf
Майкл Т. Гудрич и Роберто Тамассиа . Разработка алгоритмов: основы, анализ и примеры из Интернета . Wiley, 2002. ISBN 0-471-38365-1 . Основная теорема (включая версию случая 2, включенную здесь, которая сильнее, чем версия из CLRS) находится на стр. 268–270.