Мастер-теорема — различия между версиями
| 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
