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

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

Конспект: рекуррентности

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

Понятия

Рекуррентность - формула, выражающая T(n) через T от меньших входов плюс работу на этом шаге. Обязательна база T(1) = O(1) - место, где рекурсия останавливается.

Две формы. Убывание вычитанием: T(n) = T(n-1) + ... (вход убывает на константу). Убывание делением: T(n) = a·T(n/b) + f(n) (вход делится в b раз, вызовов a, работа на уровне f(n)).

Решить рекуррентность - найти T(n) в замкнутом виде или её порядок. Из записи a·T(n/b)+f(n) порядок напрямую не читается.

Дерево рекурсии - разложение рекуррентности в сумму по уровням: узел - работа вызова без вложенных, цена уровня - сумма его узлов, ответ - сумма по уровням.

Метод подстановки - доказательство оценки индукцией по размеру входа: угадать форму, предположить её для меньших входов, подставить и подобрать константу.

Что унести

Порядок прячется в балансе числа вызовов и работы на уровне. Одна форма 2·T(n/2) при разной f даёт разные ответы: +1 → Θ(n), +n → Θ(n·log n), +n² → Θ(n²). Поэтому рекуррентность решают, а не читают.

Дерево складывает по уровням. Для T(n)=2·T(n/2)+n каждый уровень стоит n (вызовов 2ⁱ, работы у каждого n/2ⁱ, вместе n), уровней log₂ n, итог Θ(n·log n). Число уровней задаёт закон убывания входа: деление - log n, вычитание - n. Отсюда пропасть: 2·T(n/2)+n это n·log n, а 2·T(n-1)+1 - экспонента 2ⁿ−1 (Ханой).

Когда цена уровня не постоянна, решает больший конец: убывает вниз - корень (+n² → Θ(n²)), растёт вниз - листья (+1 → Θ(n)), постоянна - число уровней (+n → Θ(n·log n)). Это и есть три случая главной теоремы из следующей главы.

Подстановка доказывает то, что дерево угадало. Угадываешь T(n) ≤ c·n·log₂ n, предполагаешь для n/2, подставляешь в рекуррентность и подбираешь c, чтобы неравенство для n замкнулось. База берётся не на единице (там log₂1=0 обнуляет оценку), а на входе побольше. Лишнее слагаемое, которое не уходит, - признак неверной догадки: так O(n) честно отвергается для 2·T(n/2)+n.

Дерево и подстановка работают в паре: прикинул порядок деревом за минуту, доказал подстановкой, когда цена ошибки высока.

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

Прочитал порядок из записи. 2·T(n/2)+f без решения ничего не говорит: при f=1 это n, при f=n² - n². Одна форма - разные порядки.

Забыл работу на уровне или базу. T(n)=2·T(n/2) без +n теряет линейное слияние и даёт неверный Θ(n). Без базы формула не определяет T(n) ни на одном входе.

Спутал число уровней. У деления это log n, у вычитания - n. Перепутал - и n·log n превратилось в экспоненту или наоборот.

Забыл листья. У 2·T(n/2)+1 вся цена в листьях; посчитав только внутренние уровни, получишь Θ(log n) вместо верного Θ(n).

В подстановке отбросил лишнее слагаемое. Доказывать надо ровно угаданную форму до последнего слагаемого; уходящее +n - сигнал, что догадка мала, а не мусор.

Начал индукцию с n=1. Там оценка c·n·log n обнуляется и не накрывает T(1)>0. Базу берут на входе побольше.

Проверь себя

Что такое рекуррентность и почему у неё обязательна база?

Чем форма T(n-1) отличается от a·T(n/b)+f(n) и как это влияет на число уровней дерева?

Почему у 2·T(n/2)+n каждый уровень стоит n, а всего выходит n·log n?

Когда ответ определяет корень, когда листья, а когда число уровней?

Как подстановка доказывает оценку и по какому признаку она отвергает неверную догадку?

Почему базу индукции берут не при n=1?

Комментарии

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

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

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