awesome-everything EN
↑ Обратно к восхождению

Алгоритмы с нуля

Dynamic programming: тест со свободным воспроизведением

Суть Подсказки на свободное воспроизведение по всему юниту DP. Сначала ответьте своими словами, затем раскройте образцовый ответ и сравните.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на middle-высоте — в небе
◷ 14 min

Воспроизведение бьёт перечитывание. На каждую подсказку проговорите или запишите полный ответ по памяти, прежде чем открыть образец — именно усилие припоминания закрепляет материал.

Цель

Восстановите хребет юнита — два разрешающих свойства, memoization против tabulation, как спроектировать state и его transition, и как работает оптимизация памяти — не подсматривая в уроки.

Вспомните перед уходом
  1. 01
    Какие два свойства должна иметь задача, прежде чем применима dynamic programming, и что даёт каждое?
  2. 02
    Сравните memoization и tabulation. Когда выбрать каждое?
  3. 03
    Как спроектировать state для DP-задачи и что делает state корректным?
  4. 04
    Что такое transition и почему порядок обхода должен его уважать?
  5. 05
    Объясните, как работает оптимизация памяти (скользящий массив) и когда она безопасна.
  6. 06
    Возьмите Longest Increasing Subsequence: дайте O(n^2) DP, идею O(n log n) и ловушку быстрой версии.
Итог

Если вы смогли восстановить каждый ответ по памяти, вы держите хребет юнита: подтвердить overlapping subproblems и optimal substructure, выбрать memoization или tabulation по глубине стека и памяти (а не по big-O), спроектировать минимальный достаточный state, написать transition по каждому выбору и обходить в порядке, уважающем его, и свернуть таблицу в окно лишь когда ни одно ещё нужное значение не перезаписывается. Сложность одинакова — число state на работу на один state.

Продолжить восхождение ↑Dynamic programming: чтение кода
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources3
expand
  1. 01
  2. 02
  3. 03

Trademarks belong to their respective owners. Editorial reference only.