Содержание
- 2. Цель лекции Изучить базовые идеи динамического программирования и простейшие примеры его применения Изучить методы реализации этих
- 3. Чем не является динамическое программирование Динамическое программирование – не метод составления программ, а метод составления алгоритмов
- 4. Где используется динамическое программирование? Алгоритм обработки графов Алгоритмы обработки строк Биоинформатика Распознавание речи Оптимизация запросов к
- 5. Числа Фибоначчи Пример почти динамического программирования Fib(0) = Fib(1) = 1 Fib(n) = Fib(n-1) + Fib(n-2),
- 6. Простой способ вычисления function fib(n : longint) : longint; begin if (n result := 1; exit;
- 7. Дерево вычислений Медленно работает – время пропорционально значению числа Фибоначчи, которые растут примерно как 1.6n Много
- 8. Метод запоминания ответов После того, как число вычислено надо его запомнить, а не считать заново В
- 9. Более быстрое вычисление function fib(n : longint) : longint; begin if (n result := 1; exit;
- 10. Ациклический граф вычислений Содержит n вершин Каждое число вычисляется ровно один раз
- 11. Что позволило ускорить вычисление? Перекрывающиеся подзадачи (много одинаковых поддеревьев) Небольшое число различных подзадач (для вычисления Fib(n)
- 12. Признаки возможности применения ДП Возможность разбиения задачи на подзадачи (метод «разделяй-и-властвуй») Наличие свойства оптимальности для подзадач
- 13. Этапы решения задачи методом динамического программирования Разбиение задачи на подзадачи Построение рекуррентной формулы для вычисления значения
- 14. Задача о наибольшей общей подпоследовательности На примере этой задачи будут рассматриваться указанные четыре этапа На базе
- 15. Постановка задачи Заданы две строки: a1a2…an и b1b2…bm Необходимо найти строку максимальной длины, которая встречается в
- 16. Медленное решение Перебрать все подпоследовательности одной из строк и проверить их вхождение в другую строку Число
- 17. Разбиение на подзадачи (1) Рассмотрим строки : a1a2…an и b1b2…bm Если последние символы совпадают (an=bm), то
- 18. Разбиение на подзадачи (2) Подзадачами являются задачи такого типа «Найти наибольшую общую подпоследвательность строк a1a2…ai и
- 19. Рекуррентная формула
- 20. Начальные условия len[0][k] = 0 для всех k len[i][0] = 0 для всех i
- 21. Два метода вычисления «Сверху вниз» – рекурсия с запоминанием ответов «Снизу вверх» – заполнение таблицы
- 22. Метод «сверху вниз» Решение больших подзадач начинается до того, как получены ответы для маленьких Маленькие решаются
- 23. Программа function calc(i, k : integer) : integer; begin if (calculated[i][k]) then begin result := len[i][k];
- 24. Преимущества и недостатки Преимущества: Достаточно просто пишется на основе рекуррентной формулы Вычисляются ответы только для тех
- 25. Метод «снизу вверх» Заполняется таблица ответов на подзадачи в порядке возрастания размера подзадачи Когда начинается решение
- 26. Программа len[0][0] := 0; for i := 1 to n do begin len[i][0] := 0; end;
- 27. Преимущества и недостатки Преимущества: Требуется меньше памяти, чем при методе «сверху вниз» и отсутствует рекурсия Быстрее
- 28. Пример Красный цвет – начальные условия Зеленый цвет – случай ai = bk Желтый цвет –
- 29. Восстановление структуры оптимального ответа Верхний путь – GA Нижний путь – AC
- 30. Программа procedure restore(i, k : integer); begin if (i = 0) or (k = 0) then
- 31. Как делать в общем случае? Такой метод работает в этой задаче, но не понятно, как его
- 32. Вычисление функции с запоминанием выбранного варианта for i := 1 to n do begin for k
- 33. Восстановление ответа procedure restore(i, k : integer); begin if (i = 0) or (k = 0)
- 34. Упражнение – 1 Путь с максимальной суммой. Задан прямоугольник размером n на m, в каждой клетке
- 35. Упражнение – 2 Число путей. Задан прямоугольник размером n на m, некоторые клетки которого вырезаны. За
- 36. Упражнение – 3 Максимальный подпалиндром. Задана строка. Необходимо найти наибольшую по длине подпоследовательность, которая является палиндромом
- 37. Упражнение – 4 Наибольшая возрастающая подпоследовательность. Задана последовательность из n чисел. Необходимо найти ее наибольшую по
- 38. Литература Кормен, Лейзерсон, Ривест, Штайн «Алгоритмы. Построение и анализ», глава 15
- 39. Выводы Динамическое программирование – метод составления алгоритмов Оно применимо в случае наличия перекрывающихся подзадач Решение задачи
- 41. Скачать презентацию