<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=213.87.133.9&amp;*</id>
		<title>Викиконспекты - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=213.87.133.9&amp;*"/>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/213.87.133.9"/>
		<updated>2026-05-21T15:47:25Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B0%D1%81%D1%82%D0%B5%D1%80-%D1%82%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0&amp;diff=71803</id>
		<title>Мастер-теорема</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B0%D1%81%D1%82%D0%B5%D1%80-%D1%82%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0&amp;diff=71803"/>
				<updated>2019-09-16T09:06:03Z</updated>
		
		<summary type="html">&lt;p&gt;213.87.133.9: /* Пример 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Мастер теорема''' (англ. ''Master theorem'') позволяет найти асимптотическое решение рекуррентных соотношений, которые могут возникнуть в анализе асимптотики многих алгоритмов. Однако не все рекуррентные соотношения могут быть решены через мастер теорему, ее обобщения включаются в метод Акра-Бацци&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Akra%E2%80%93Bazzi_method Википедия {{---}} Метод Акра-Бацци]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Формулировка и доказательство мастер-теоремы==&lt;br /&gt;
{{&lt;br /&gt;
&lt;br /&gt;
Теорема&lt;br /&gt;
|about = &lt;br /&gt;
мастер-теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть имеется рекуррентное соотношения:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex dpi = &amp;quot;135&amp;quot;&amp;gt; T(n) = \begin{cases}&lt;br /&gt;
  a \; T\!\left(\dfrac{n}{b}\right) + O(n^{c})  , &amp;amp;      n &amp;gt; 1\\ &lt;br /&gt;
  O(1)    , &amp;amp;       n = 1&lt;br /&gt;
\end{cases}&lt;br /&gt;
, &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где  &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\in \mathbb N &amp;lt;/tex&amp;gt;,  &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \in \mathbb R &amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; b &amp;gt; 1&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;c&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\mathbb \in R^{+} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Тогда асимптотическое решение имеет вид:&lt;br /&gt;
&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;c &amp;gt; \log_b a&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;T(n) = O\left( n^{c} \right)&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;c = \log_b a&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;T(n) = O\left( n^{c} \log n \right)&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;c &amp;lt; \log_b a&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;T(n) = O\left( n^{\log_b a} \right)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|proof= Рассмотрим дерево рекурсии данного соотношения. Всего в нем будет &amp;lt;tex&amp;gt;\log_b n&amp;lt;/tex&amp;gt; уровней. На каждом таком уровне, количество детей в дереве будет умножаться на &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, так на уровне &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; будет &amp;lt;tex&amp;gt;a^i&amp;lt;/tex&amp;gt; детей. Также известно, что каждый ребенок на уровне &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; размера &amp;lt;tex&amp;gt;\dfrac{n}{b^i}&amp;lt;/tex&amp;gt;. Ребенок размера &amp;lt;tex&amp;gt;\left(\dfrac{n}{b^i}\right)&amp;lt;/tex&amp;gt; требует &amp;lt;tex&amp;gt;O\left(\left(\dfrac{n}{b^i}\right) ^ c\right)&amp;lt;/tex&amp;gt; дополнительных затрат, поэтому общее количество совершенных действий на уровне &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; :   &lt;br /&gt;
&amp;lt;tex&amp;gt; O\left(a^i\left(\dfrac{n}{b^i}\right)^c\right) = O\left (n^c\left(\dfrac{a^i}{b^{ic}}\right)\right) = O\left (n^c\left(\dfrac{a}{b^c}\right)^i\right)&amp;lt;/tex&amp;gt;&lt;br /&gt;
Заметим, что количество операций увеличивается, уменьшается и остается константой, если &amp;lt;tex&amp;gt;\left(\dfrac{a}{b^c}\right)^i&amp;lt;/tex&amp;gt; увеличивается, уменьшается или остается константой соответственно.&lt;br /&gt;
&lt;br /&gt;
Поэтому решение разбивается на три случая, когда &amp;lt;tex&amp;gt;\dfrac{a}{b^c}&amp;lt;/tex&amp;gt; больше &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;, равна &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; или меньше &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;.  Рассмотрим &amp;lt;tex dpi = &amp;quot;130&amp;quot;&amp;gt;\dfrac{a}{b^c}\ = 1\Leftrightarrow a = b^c \Leftrightarrow\ \log_b a = c \log_b b \Leftrightarrow\ \log_b a = c&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Распишем всю работу в течение рекурсивного спуска:&lt;br /&gt;
&amp;lt;tex dpi = &amp;quot;130&amp;quot;&amp;gt;T(n) = \displaystyle\sum_{i=0}^{\log_b n}O\left(n^c\cdot\left(\frac{a}{b^c}\right)^i\right) +  O(1)= O\left(n^c\cdot\displaystyle\sum_{i=0}^{\log_b n}\left(\frac{a}{b^c}\right)^i\right)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Откуда получаем:&lt;br /&gt;
&lt;br /&gt;
#&amp;lt;tex&amp;gt;c &amp;gt; \log_b a  &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;T(n) = O\left( n^{c} \right)&amp;lt;/tex&amp;gt; (так как &amp;lt;tex dpi = &amp;quot;130&amp;quot;&amp;gt; \left(\dfrac{a}{b^c}\right)^i&amp;lt;/tex&amp;gt; убывающая геометрическая прогрессия)&lt;br /&gt;
#&amp;lt;tex&amp;gt;c = \log_b a  &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt; &amp;lt;tex dpi = &amp;quot;130&amp;quot;&amp;gt; T(n) = \displaystyle\sum_{i=0}^{\log_b n}n^c\cdot\left(\frac{a}{b^c}\right)^i = &amp;lt;/tex&amp;gt; &amp;lt;tex dpi = &amp;quot;130&amp;gt; n^c\cdot\displaystyle\sum_{i=0}^{\log_b n}\left(\frac{a}{b^c}\right)^i = n^c\cdot\displaystyle\sum_{i=0}^{\log_b n}1^i = n^c + n^c\log_b n = O\left( n^{c} \log n \right) &amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;c &amp;lt; \log_b a &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt; &amp;lt;tex dpi = &amp;quot;125&amp;quot;&amp;gt; T(n) = \displaystyle\sum_{i=0}^{\log_b n}n^c\cdot\left(\frac{a}{b^c}\right)^i = n^c\cdot\displaystyle\sum_{i=0}^{\log_b n}\left(\dfrac{a}{b^c}\right)^i =  O\left(n^c\cdot\left(\dfrac{a}{b^c}\right)^{\log_b n}\right)&amp;lt;/tex&amp;gt;, но   &amp;lt;tex dpi = &amp;quot;130&amp;quot;&amp;gt; n^c\cdot\left(\dfrac{a}{b^c}\right)^{\log_b n} &amp;lt;/tex&amp;gt; &amp;lt;tex dpi = &amp;quot;130&amp;quot;&amp;gt; =  &amp;lt;/tex&amp;gt;  &amp;lt;tex dpi = &amp;quot;130&amp;quot;&amp;gt;  n^c\cdot\left(\dfrac{a^{\log_b n} }{(b^c)^{\log_b n}}\right)  &amp;lt;/tex&amp;gt; &amp;lt;tex dpi = &amp;quot;130&amp;quot;&amp;gt; =  &amp;lt;/tex&amp;gt; &amp;lt;tex dpi = &amp;quot;130&amp;quot;&amp;gt;  n^c\cdot\left(\dfrac{n^{\log_b a}}{n^c}\right)&amp;lt;/tex&amp;gt; &amp;lt;tex dpi = &amp;quot;130&amp;quot;&amp;gt; =  &amp;lt;/tex&amp;gt;  &amp;lt;tex dpi = &amp;quot;130&amp;quot;&amp;gt;   n^{\log_b a} \Rightarrow T(n) = O\left(n^{\log_b a}\right)&amp;lt;/tex&amp;gt; &lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
Мастер-теорема имеет прямое отношение к анализу алгоритмов, так как рекуррентное соотношение можно воспринимать следующим образом: имеется задача размера &amp;lt;tex&amp;gt; n &amp;lt;/tex&amp;gt;, алгоритм разбивает её на &amp;lt;tex&amp;gt; a &amp;lt;/tex&amp;gt; подзадач размера &amp;lt;tex&amp;gt; \dfrac{n}{b} &amp;lt;/tex&amp;gt; , тратит дополнительно &amp;lt;tex&amp;gt; O(n^c) &amp;lt;/tex&amp;gt;  действий, а если размер подзадачи становится равен единице, то алгоритму требуется &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt; действий на её решение. &lt;br /&gt;
&lt;br /&gt;
Из доказательства теоремы видно, что если в рекурретном соотношении заменить &amp;lt;tex&amp;gt; O &amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt; \Theta &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; \Omega &amp;lt;/tex&amp;gt;, то и асимптотика решения изменится соответствующим образом на &amp;lt;tex&amp;gt; \Theta &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; \Omega &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Примеры==  &lt;br /&gt;
&lt;br /&gt;
=== Примеры задач ===&lt;br /&gt;
==== Пример 1 ====&lt;br /&gt;
Пусть задано такое рекуррентное соотношение:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; t(n) = \begin{cases}&lt;br /&gt;
  2 \; t\!\left(\dfrac{n}{2}\right) + O(n\log n)  , &amp;amp;      n &amp;gt; 1\\ &lt;br /&gt;
  1    , &amp;amp;       n = 1 &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt; n\log n = O(n^c) &amp;lt;/tex&amp;gt;, для любого &amp;lt;tex&amp;gt; c &amp;gt; 1 &amp;lt;/tex&amp;gt;, что удовлетворяет 1 условию. Тогда &amp;lt;tex&amp;gt; T(n) = O(n^c) &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; c &amp;gt; 1 &amp;lt;/tex&amp;gt;, при &amp;lt;tex&amp;gt; a = 2, b = 2, \log_b a = 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Пример 2 ====&lt;br /&gt;
Задано такое соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;f(n) =&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;n\sqrt{n + 1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; T(n) = \begin{cases}&lt;br /&gt;
  2 \; T\!\left(\dfrac{n}{3}\right) + O(f(n))  , &amp;amp;      n &amp;gt; 1\\ &lt;br /&gt;
  d    , &amp;amp;       n = 1 &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;f(n) = n\sqrt {n + 1} &amp;lt; n\sqrt{n + n} &amp;lt; n\sqrt{2n} = O(n^{3/2}) &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данное соотношение подходит под первый случай &amp;lt;tex&amp;gt;\left(a = 2, b = 3, c = \dfrac{3}{2}\right)&amp;lt;/tex&amp;gt;, поэтому его асимптотика совпадает с асимптотикой &amp;lt;tex&amp;gt;O(f(n))&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Недопустимые соотношения ===&lt;br /&gt;
Рассмотрим пару соотношений, которые нельзя решить мастер-теоремой:&lt;br /&gt;
*&amp;lt;tex dpi = &amp;quot;130&amp;quot;&amp;gt;T(n) = 2^nT\left (\dfrac{n}{2}\right )+O(n^n)&amp;lt;/tex&amp;gt;&lt;br /&gt;
*:&amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; не является константой; количество подзадач может меняться,&lt;br /&gt;
*&amp;lt;tex dpi = &amp;quot;130&amp;quot;&amp;gt;T(n) = 2T\left (\dfrac{n}{2}\right )+O\left(\dfrac{n}{\log n}\right)&amp;lt;/tex&amp;gt;&lt;br /&gt;
*:рассмотрим &amp;lt;tex&amp;gt; f(n) = \dfrac{n}{\log n} &amp;lt;/tex&amp;gt; , тогда не существует такого &amp;lt;tex&amp;gt; O(n^c) &amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt; f(n) \in O(n^c) &amp;lt;/tex&amp;gt;, так как при &amp;lt;tex&amp;gt; n = 1 , f(n) \rightarrow \!\, \infty &amp;lt;/tex&amp;gt;, а &amp;lt;tex&amp;gt; O(n^c) &amp;lt;/tex&amp;gt; ограничено,&lt;br /&gt;
*&amp;lt;tex dpi = &amp;quot;130&amp;quot;&amp;gt;T(n) = 0.5T\left (\dfrac{n}{2}\right )+O(n)&amp;lt;/tex&amp;gt;&lt;br /&gt;
*:&amp;lt;tex&amp;gt;|a| &amp;lt; 1&amp;lt;/tex&amp;gt;, однако пример можно решить следующим образом: заметим, что на &amp;lt;tex&amp;gt; i &amp;lt;/tex&amp;gt; шаге, размер &amp;lt;tex&amp;gt; T(i) \leqslant \dfrac{c \cdot n}{4^i} &amp;lt;/tex&amp;gt; , тогда, оценивая сумму, получаем, что &amp;lt;tex&amp;gt; T(n) = O(n) &amp;lt;/tex&amp;gt;,&lt;br /&gt;
*&amp;lt;tex dpi = &amp;quot;130&amp;quot;&amp;gt;T(n) = -2T\left (\dfrac{n}{3}\right )+O(n^2)&amp;lt;/tex&amp;gt;&lt;br /&gt;
*:&amp;lt;tex&amp;gt; a &amp;lt; 0 &amp;lt;/tex&amp;gt;, при составлении асимптотического решения перед &amp;lt;tex&amp;gt; O &amp;lt;/tex&amp;gt; каждый раз будет новый знак, что противоречит мастер-теореме.&lt;br /&gt;
&lt;br /&gt;
=== Приложение к известным алгоритмам ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Алгоритм&lt;br /&gt;
! Рекуррентное соотношение&lt;br /&gt;
! Время работы&lt;br /&gt;
! Комментарий&lt;br /&gt;
|-&lt;br /&gt;
| [[Целочисленный двоичный поиск]]&lt;br /&gt;
| &amp;lt;tex&amp;gt;T(n) = T\left(\dfrac{n}{2}\right) + O(1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
| &amp;lt;tex&amp;gt;O(\log n)&amp;lt;/tex&amp;gt;&lt;br /&gt;
| По мастер-теореме &amp;lt;tex&amp;gt;c = \log_b a&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;a = 1, b = 2, c = 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[Дерево поиска, наивная реализация | Обход бинарного дерева]]&lt;br /&gt;
| &amp;lt;tex&amp;gt;T(n) = 2 T\left(\dfrac{n}{2}\right) + O(1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
| &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt;&lt;br /&gt;
| По мастер-теореме &amp;lt;tex&amp;gt;c &amp;lt; \log_b a&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;a = 2, b = 2, c = 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  [[Сортировка слиянием]]&lt;br /&gt;
| &amp;lt;tex&amp;gt;T(n) = 2 T\left(\dfrac{n}{2}\right) + O(n)&amp;lt;/tex&amp;gt;&lt;br /&gt;
| &amp;lt;tex&amp;gt;O(n \log n)&amp;lt;/tex&amp;gt;&lt;br /&gt;
| По мастер-теореме &amp;lt;tex&amp;gt;c = \log_b a&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;a = 2, b = 2, c = 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== См.также ==&lt;br /&gt;
* [[Амортизационный анализ]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Master_theorem Википедия — Мастер-теорема]&lt;br /&gt;
* [https://math.dartmouth.edu/archive/m19w03/public_html/Section5-2.pdf Dartmouth university — The master theorem]&lt;br /&gt;
*''Кормен Т., Лейзерсон Ч., Ривест Р., Штайн К.'' Алгоритмы: построение и анализ, 2-е издание.стр. 110 М.: Издательский дом &amp;quot;Вильямс&amp;quot;, 2005. ISBN 5-8459-0857-4&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория:Амортизационный анализ]]&lt;/div&gt;</summary>
		<author><name>213.87.133.9</name></author>	</entry>

	</feed>