Мастер-теорема — различия между версиями
Shersh (обсуждение | вклад) м (→Источники информации) |
Timur (обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
− | '''Мастер теорема''' (англ. Master theorem) позволяет найти асимптотическое решение рекуррентных соотношений, которые могут возникнуть в анализе асимптотики многих алгоритмов. Однако не все рекуррентные соотношения могут быть решены через мастер теорему, ее обобщения включаются в метод Акра-Бацци. | + | '''Мастер теорема''' (англ. ''Master theorem'') позволяет найти асимптотическое решение рекуррентных соотношений, которые могут возникнуть в анализе асимптотики многих алгоритмов. Однако не все рекуррентные соотношения могут быть решены через мастер теорему, ее обобщения включаются в метод Акра-Бацци. |
==Формулировка и доказательство мастер-теоремы== | ==Формулировка и доказательство мастер-теоремы== | ||
{{ | {{ | ||
− | Теорема|statement= | + | |
− | + | Теорема | |
+ | |about = | ||
+ | Об асимптотическом решении рекуррентного соотношения | ||
+ | |statement= | ||
+ | В анализе асимптотики алгоритма получено соотношение такого вида: | ||
<tex dpi = "135"> T(n) = \begin{cases} | <tex dpi = "135"> T(n) = \begin{cases} | ||
Строка 12: | Строка 16: | ||
</tex> | </tex> | ||
− | где < | + | где <tex>a</tex> — количество подзадач, на которые мы разбиваем нашу задачу, <tex>n</tex> — размер нашей задачи, <tex dpi = "125">\dfrac{n}{b}</tex> — размер подзадачи, <tex> n ^ {c} </tex> — стоимость работы, проделанной рекурсивными вызовами, который включает в себя стоимость деления проблемы и стоимость слияния решения подзадач, <math>d</math> — начальная стоимость для данной задачи(при <math>n = 1</math>). |
− | Пусть < | + | Пусть <tex>a</tex> — <tex>\mathbb N </tex> число большее <tex>1</tex>, <tex>b</tex> — <tex>\mathbb R </tex> число большее <tex>1</tex>, <tex>c</tex> — <tex>\mathbb R^{+} </tex> число и <tex>d</tex> — <tex>\mathbb R^{+} </tex> , тогда решение данной рекурренты зависит от соотношения между <tex>a, b, c</tex> так: |
− | + | * Если <tex>c > \log_b a</tex>, то <tex>T(n) = \Theta\left( n^{c} \right)</tex> | |
− | + | * Если <tex>c = \log_b a</tex>, то <tex>T(n) = \Theta\left( n^{c} \log n \right)</tex> | |
− | + | * Если <tex>c < \log_b a</tex>, то <tex>T(n) = \Theta\left( n^{\log_b a} \right)</tex> | |
− | |proof= | + | |proof= Давайте рассмотрим дерево рекурсии. Всего в нем будет <tex>\log_b n</tex> уровней. На каждом таком уровне, количество подзадач будет умножаться на <tex>a</tex>, так на уровне <tex>i</tex> будет <tex>a^i</tex> подзадач. Также известно, что каждая подзадача на уровне <tex>i</tex> размера <tex>\dfrac{n}{b^i}</tex>. Подзадача размера <tex>\dfrac{n}{b^i}</tex> требует <tex>(\dfrac{n}{b^i}) ^ c</tex> дополнительных затрат, поэтому общее количество совершенных операций на уровне <tex>i</tex> : |
− | Давайте рассмотрим дерево рекурсии. Всего в нем будет < | + | <tex>a^i(\dfrac{n}{b^i})^c = n^c(\dfrac{a^i}{b^{ic}}) = n^c(\dfrac{a}{b^c})^i</tex> |
− | <tex | + | Заметим, что количество операций увеличивается, уменьшается и остается константой, если <tex>(\dfrac{a}{b^c})^i</tex> увеличивается, уменьшается или остается константой соответственно. |
− | Заметим, что количество операций увеличивается, уменьшается и остается константой, если <tex | + | Поэтому мы должны разобрать три случая, когда <tex>(\dfrac{a}{b^c})^i</tex> больше <tex>1</tex>, равен <math>1</math> или меньше <math>1</math>. |
− | Поэтому мы должны разобрать три случая, когда <tex | ||
Рассмотрим <tex dpi = "140">(\dfrac{a}{b^c})^i = 1</tex> <tex dpi = "140">\Leftrightarrow a = b^c\Leftrightarrow\ log_b a = c \log_b b\Leftrightarrow\log_b a = c</tex>. | Рассмотрим <tex dpi = "140">(\dfrac{a}{b^c})^i = 1</tex> <tex dpi = "140">\Leftrightarrow a = b^c\Leftrightarrow\ log_b a = c \log_b b\Leftrightarrow\log_b a = c</tex>. | ||
Распишем всю работу в течение рекурсивного спуска: | Распишем всю работу в течение рекурсивного спуска: | ||
− | <tex dpi = "130"> \displaystyle\sum_{i=1}^{\log_b n}n^c(\frac{a}{b^c})^i = n^c\displaystyle\sum_{i=1}^{\log_b n}(\frac{a}{b^c})^i</tex> | + | <tex dpi = "130"> d\cdot \displaystyle\sum_{i=1}^{\log_b n}n^c(\frac{a}{b^c})^i = n^c\cdot d \cdot\displaystyle\sum_{i=1}^{\log_b n}(\frac{a}{b^c})^i</tex> |
Откуда получаем: | Откуда получаем: | ||
− | 1. < | + | 1. <tex>\log_b a < c </tex> <tex>\Rightarrow</tex> <tex>T(n) = \Theta\left( n^{c} \right)</tex> (т.к. <tex dpi = "130"> (\dfrac{a}{b^c})^i</tex> убывающая геометрическая прогрессия) |
− | 2. < | + | 2. <tex>\log_b a = c </tex> <tex>\Rightarrow</tex> <tex dpi = "125"> T(n) = \displaystyle\sum_{i=1}^{\log_b n}n^c\cdot(\frac{a}{b^c})^i = </tex> <tex dpi = "125> n^c\cdot\displaystyle\sum_{i=1}^{\log_b n}(\frac{a}{b^c})^i = n^c\cdot\displaystyle\sum_{i=1}^{\log_b n}1^i = n^c + n^c\log_b n = \Theta\left( n^{c} \log n \right) </tex> |
− | 3. < | + | 3. <tex>\log_b a > c </tex> <tex>\Rightarrow</tex> <tex dpi = "125"> T(n) = \displaystyle\sum_{i=1}^{\log_b n}n^c\cdot(\frac{a}{b^c})^i = n^c\cdot\displaystyle\sum_{i=1}^{\log_b n}(\frac{a}{b^c})^i = \Theta\left( n^c\cdot(\frac{a}{b^c})^{log_b n} \right)</tex>, но <tex dpi = "150"> n^c\cdot(\frac{a}{b^c})^{log_b n} </tex> <tex dpi = "130"> = </tex> <tex dpi = "150"> n^c\cdot(\frac{a^{log_b n} }{(b^c)^{log_b n}}) </tex> <tex dpi = "130"> = </tex> <tex dpi = "150"> n^c\cdot(\frac{n^{log_b a}}{n^c})</tex> <tex dpi = "130"> = </tex> <tex dpi = "130"> \Theta\left( n^{\log_b a} \right) </tex> |
}} | }} | ||
Строка 45: | Строка 48: | ||
Пусть задано такое рекуррентное соотношение: | Пусть задано такое рекуррентное соотношение: | ||
− | Рассчитать для < | + | Рассчитать для <tex>x = 7</tex>. |
− | < | + | <tex> t(x) = \begin{cases} |
3 \; t\!\left(\frac{x}{2}\right) + x^{2} , & x > 2\\ | 3 \; t\!\left(\frac{x}{2}\right) + x^{2} , & x > 2\\ | ||
5x , & 1 < x < 2 | 5x , & 1 < x < 2 | ||
\end{cases} | \end{cases} | ||
− | </ | + | </tex> |
− | Заметим, чтобы узнать < | + | Заметим, чтобы узнать <tex>t(7)</tex> , мы должны знать <tex>t(7/2)</tex>, чтобы узнать <tex>t(7/2)</tex>, мы должны узнать <tex>t(7/4)</tex>, <tex>1 < 7/4 < 2</tex>, тогда <tex>t(7/4) = 35/4</tex> , <tex>t(7/2) = 3\cdot35/4 + 49/4</tex>, тогда <tex>t(7) = 3t(7/2) + 7^2 = 329/2</tex> |
==== Пример 2 ==== | ==== Пример 2 ==== | ||
Задано такое соотношение: | Задано такое соотношение: | ||
− | < | + | <tex>f(n) =</tex> <tex>n\sqrt{n + 1}</tex> |
− | < | + | <tex> T(n) = \begin{cases} |
2 \; T\!\left(\frac{n}{3}\right) + f(n) , & n > 1\\ | 2 \; T\!\left(\frac{n}{3}\right) + f(n) , & n > 1\\ | ||
d , & n = 1 | d , & n = 1 | ||
\end{cases} | \end{cases} | ||
− | </ | + | </tex> |
− | < | + | <tex>f(n) = n\sqrt {n + 1} < n\sqrt{n + n} < n\sqrt{2n} = O(n^{3/2}) </tex> |
− | Данное соотношение подходит под первый случай < | + | Данное соотношение подходит под первый случай <tex>(a = 2, b = 3, c = \dfrac{3}{2})</tex>, поэтому его асимптотика совпадает с асимптотикой <tex>f(n)</tex> |
=== Недопустимые соотношения === | === Недопустимые соотношения === | ||
Рассмотрим пару ошибочно-составленных соотношений: | Рассмотрим пару ошибочно-составленных соотношений: | ||
− | *< | + | *<tex dpi = "130">T(n) = 2^nT\left (\frac{n}{2}\right )+n^n</tex> |
− | *:< | + | *:<tex>a</tex> не является константой; количество подзадач может меняться |
− | *< | + | *<tex dpi = "130">T(n) = 2T\left (\frac{n}{2}\right )+\frac{n}{\log n}</tex> |
− | *:не | + | *:не удовлетворяет условию <tex> \dfrac{n}{\log n} </tex> не равно <tex> n^c </tex> |
− | + | *<tex dpi = "130">T(n) = 0.5T\left (\frac{n}{2}\right )+n</tex> | |
− | *:< | + | *:<tex>a</tex> < 1 не может быть меньше одной подзадачи |
− | *< | + | *<tex dpi = "130">T(n) = 64T\left (\frac{n}{8}\right )-n^2\log n</tex> |
− | *:< | + | *:<tex>f(n)</tex> не положительна |
=== Приложение к известным алгоритмам === | === Приложение к известным алгоритмам === | ||
{| class="wikitable" | {| class="wikitable" | ||
Строка 88: | Строка 91: | ||
|- | |- | ||
| [[Целочисленный двоичный поиск]] | | [[Целочисленный двоичный поиск]] | ||
− | | < | + | | <tex>T(n) = T\left(\frac{n}{2}\right) + O(1)</tex> |
− | | < | + | | <tex>O(\log n)</tex> |
− | | По мастер-теореме < | + | | По мастер-теореме <tex>c = \log_b a</tex>, где <tex>a = 1, b = 2, c = 0</tex> |
|- | |- | ||
− | | | + | | [[Дерево поиска, наивная реализация | Обход бинарного дерева]] |
− | | < | + | | <tex>T(n) = 2 T\left(\frac{n}{2}\right) + O(1)</tex> |
− | | < | + | | <tex>O(n)</tex> |
− | | По мастер-теореме < | + | | По мастер-теореме <tex>c < \log_b a</tex>, где <tex>a = 2, b = 2, c = 0</tex> |
|- | |- | ||
| [[Сортировка слиянием]] | | [[Сортировка слиянием]] | ||
− | | < | + | | <tex>T(n) = 2 T\left(\frac{n}{2}\right) + O(n)</tex> |
− | | < | + | | <tex>O(n \log n)</tex> |
− | | По мастер-теореме < | + | | По мастер-теореме <tex>c = \log_b a</tex>, где <tex>a = 2, b = 2, c = 1</tex> |
|} | |} | ||
Строка 107: | Строка 110: | ||
* [http://en.wikipedia.org/wiki/Master_theorem Википедия — Мастер-теорема] | * [http://en.wikipedia.org/wiki/Master_theorem Википедия — Мастер-теорема] | ||
* [https://math.dartmouth.edu/archive/m19w03/public_html/Section5-2.pdf Dartmouth university — The master theorem] | * [https://math.dartmouth.edu/archive/m19w03/public_html/Section5-2.pdf Dartmouth university — The master theorem] | ||
− | *''Кормен Т., Лейзерсон Ч., Ривест Р., Штайн К.'' Алгоритмы: построение и анализ, 2-е издание. М.: Издательский дом "Вильямс", 2005. ISBN 5-8459-0857-4 | + | *''Кормен Т., Лейзерсон Ч., Ривест Р., Штайн К.'' Алгоритмы: построение и анализ, 2-е издание.стр. 110 М.: Издательский дом "Вильямс", 2005. ISBN 5-8459-0857-4 |
== Примечание == | == Примечание == |
Версия 21:59, 7 мая 2015
Мастер теорема (англ. Master theorem) позволяет найти асимптотическое решение рекуррентных соотношений, которые могут возникнуть в анализе асимптотики многих алгоритмов. Однако не все рекуррентные соотношения могут быть решены через мастер теорему, ее обобщения включаются в метод Акра-Бацци.
Содержание
Формулировка и доказательство мастер-теоремы
Теорема (Об асимптотическом решении рекуррентного соотношения): |
В анализе асимптотики алгоритма получено соотношение такого вида:
где — количество подзадач, на которые мы разбиваем нашу задачу, — размер нашей задачи, — размер подзадачи, — стоимость работы, проделанной рекурсивными вызовами, который включает в себя стоимость деления проблемы и стоимость слияния решения подзадач, — начальная стоимость для данной задачи(при ). Пусть — число большее , — число большее , — число и — , тогда решение данной рекурренты зависит от соотношения между так:
|
Доказательство: |
Давайте рассмотрим дерево рекурсии. Всего в нем будет уровней. На каждом таком уровне, количество подзадач будет умножаться на , так на уровне будет подзадач. Также известно, что каждая подзадача на уровне размера . Подзадача размера требует дополнительных затрат, поэтому общее количество совершенных операций на уровне : Заметим, что количество операций увеличивается, уменьшается и остается константой, если увеличивается, уменьшается или остается константой соответственно. Поэтому мы должны разобрать три случая, когда больше , равен или меньше . Рассмотрим . Распишем всю работу в течение рекурсивного спуска: Откуда получаем:1. (т.к. убывающая геометрическая прогрессия)2. 3. , но |
Примеры
Примеры задач
Пример 1
Пусть задано такое рекуррентное соотношение:
Рассчитать для
.
Заметим, чтобы узнать
, мы должны знать , чтобы узнать , мы должны узнать , , тогда , , тогдаПример 2
Задано такое соотношение:
Данное соотношение подходит под первый случай
, поэтому его асимптотика совпадает с асимптотикойНедопустимые соотношения
Рассмотрим пару ошибочно-составленных соотношений:
- не является константой; количество подзадач может меняться
- не удовлетворяет условию не равно
- < 1 не может быть меньше одной подзадачи
- не положительна
Приложение к известным алгоритмам
Алгоритм | Рекуррентное соотношение | Время работы | Комментарий |
---|---|---|---|
Целочисленный двоичный поиск | По мастер-теореме | , где||
Обход бинарного дерева | По мастер-теореме | , где||
Сортировка слиянием | По мастер-теореме | , где
Источники информации
- Википедия — Мастер-теорема
- Dartmouth university — The master theorem
- Кормен Т., Лейзерсон Ч., Ривест Р., Штайн К. Алгоритмы: построение и анализ, 2-е издание.стр. 110 М.: Издательский дом "Вильямс", 2005. ISBN 5-8459-0857-4