1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7

# конспект · шаг 7 из 7

Конспект: главная теорема

выжимка - её можно унести в заметки

Понятия

Главная теорема - готовая формула для T(n) = a·T(n/b) + f(n) (a ≥ 1, b > 1, подзадачи равны). Сравнивает работу одного вызова вне рекурсии f(n) с водоразделом n^(log_b a).

Водораздел n^(log_b a) - число листьев дерева рекурсии. На уровне k узлов a^k, глубина log_b n, листьев a^(log_b n) = n^(log_b a) для степеней b; округления не меняют порядок. Работа уровня k равна a^k·f(n/b^k).

Три случая. f меньше водораздела (полиномиально) → Θ(n^(log_b a)), случай 1 (листья). f того же порядка → Θ(n^(log_b a)·log n), случай 2 (уровни). f больше (полиномиально) и выполнена регулярность → Θ(f(n)), случай 3 (корень).

Условие регулярности (только случай 3) - a·f(n/b) ≤ c·f(n) при c < 1: работа по уровням убывает геометрически вниз, поэтому её сумму задаёт корень.

Полиномиальный разрыв - отличие f от водораздела хотя бы на множитель n^ε (ε > 0). Разрыв лишь на логарифм - зазор, теорема неприменима.

Что унести

Порядок применения: выпиши a, b, f; посчитай n^(log_b a); сравни с f; назови случай. Три случая - это «листья, уровни, корень» из прошлой главы, записанные формулой.

Один и тот же ответ приходит через разные случаи. 4·T(n/2)+n и 2·T(n/2)+n² оба дают Θ(n²), но первый - случаем 1 (широкое дерево, листьев n²), второй - случаем 3 (тяжёлый корень). Понимать надо, КТО решает, а не только итог.

Случай 3 требует регулярности. У степенных f она выполняется сама, но проверить надо: a·f(n/b) ≤ c·f(n), c < 1. Смысл - уровень ниже стоит долю c от текущего, работа падает геометрически, ряд сходится к корню.

Теорема не всесильна. Зазор: f отличается от водораздела лишь на логарифм - 2·T(n/2)+n·log n даёт Θ(n·log²n) деревом, а наивный случай 3 потерял бы log n. Чужие формы: вычитание (T(n-1)) и переменные a, b берут дерево и подстановка, не теорема.

Неравные разбиения (T(n/3)+T(2n/3)+n) берёт теорема Акры-Бацци: найди p из Σ aᵢ·bᵢ^p = 1 (делением пополам, если не угадывается), ответ Θ(n^p·(1 + ∫₁ⁿ f(u)/u^(p+1) du)). Интеграл ограничен - решают листья, n^p.

Почти все «разделяй и властвуй» ложатся в теорему: слияние (2·T(n/2)+n → n·log n), Штрассен (7·T(n/2)+n² → n^(log₂7), показатель log₂7 ≈ 2,80735), число инверсий (2·T(n/2)+n → n·log n вместо квадратичного перебора).

Ловушки джокера

Спутал, что с чем сравнивают. Сравнивают f(n) с n^(log_b a), а не a с b. Показатель водораздела - log_b a, не a·b и не a.

Объявил случай 3 без проверки регулярности. Обычно ответ верный, но на подстроенных f регулярность рвётся, и Θ(f(n)) неверно.

Наивно применил случай 3 к зазору. 2·T(n/2)+n·log n - не случай 3: разрыв на log n не полиномиален. Верный ответ Θ(n·log²n), а не Θ(n·log n).

Подогнал под теорему вычитание. 2·T(n-1)+1 - не a·T(n/b): b > 1 обязательно. Ответ (экспонента) теорема не даст, решай разворачиванием.

Заменил неравные подзадачи большей. T(n/3)+T(2n/3) как 2·T(2n/3) даёт n^(log_(3/2) 2) вместо n·log n; и сумма долей меньше единицы не значит «решает корень»: T(n/2)+T(n/4)+1 растёт как n^p, где p = log₂((1+√5)/2) ≈ 0,69424.

Перепутал направление регулярности. a·f(n/b) - уровень ВНИЗ (вход в b раз меньше), подставляют n/b, а не n·b.

Проверь себя

Что такое n^(log_b a) и почему в формуле стоит именно оно?

Как по a, b, f определить случай и выписать ответ?

Зачем в случае 3 проверяют условие регулярности и что оно означает?

Почему 4·T(n/2)+n и 2·T(n/2)+n² дают один ответ Θ(n²), но разными случаями?

Почему к 2·T(n/2)+n·log n теорема неприменима и что даёт дерево?

Какие формы рекуррентностей теорема не берёт вовсе?

Как найти показатель p для T(n/3)+T(2n/3)+n и почему n^p - мера, которая при делении сохраняется?

Комментарии

Пока нет комментариев. Будь первым!

Оставить комментарий

Комментарий появится после проверки. Email не публикуется. Войти, чтобы не вводить имя каждый раз.