1 1 1 Алгоритмы и структуры данных Динамическое

Скачать презентацию 1 1 1 Алгоритмы и структуры данных Динамическое Скачать презентацию 1 1 1 Алгоритмы и структуры данных Динамическое

acd_09.ppt

  • Количество слайдов: 28

>1 1 1 Алгоритмы и структуры данных Динамическое программирование ЛЕКЦИЯ 9 Валенда Н.А. Кафедра 1 1 1 Алгоритмы и структуры данных Динамическое программирование ЛЕКЦИЯ 9 Валенда Н.А. Кафедра Программной инженерии, факультет КН, ХНУРЕ

>Динамическое программирование – метод решения класса задач, где общее решение задачи основано на решении Динамическое программирование – метод решения класса задач, где общее решение задачи основано на решении подзадач меньшего размера. Подзадачи, на которые разбивается задача, являются пересекающимися. Ключевая идея в динамическом программировании достаточно проста. Чтобы решить задачу, требуется решить отдельные части задачи (подзадачи), после чего объединить решения подзадач в одно общее решение. Часто многие из этих подзадач одинаковы. Подход динамического программирования состоит в том, чтобы решить каждую подзадачу только один раз, сократив тем самым количество вычислений. Это особенно полезно в случаях, когда число повторяющихся подзадач экспоненциально велико.

>динамическое программирование пользуется следующими свойствами задачи: перекрывающиеся подзадачи; оптимальное решение задачи основано на оптимальном динамическое программирование пользуется следующими свойствами задачи: перекрывающиеся подзадачи; оптимальное решение задачи основано на оптимальном решении подзадач; возможность запоминания решения полученных оптимальных решений. Динамическое программирование обычно придерживается двух подходов к решению задач: нисходящее динамическое программирование: задача разбивается на подзадачи меньшего размера, они решаются и затем комбинируются для решения исходной задачи. Используется запоминание для решений часто встречающихся подзадач. восходящее динамическое программирование: все подзадачи, которые впоследствии понадобятся для решения исходной задачи просчитываются заранее и затем используются для построения решения исходной задачи.

>Процесс разработки алгоритмов динамического программирования можно разбить на четыре этапа. Описание структуры оптимального решения. Процесс разработки алгоритмов динамического программирования можно разбить на четыре этапа. Описание структуры оптимального решения. 2. Рекурсивное определение значения, соответствующего оптимальному решению. 3. Вычисление значения, соответствующего оптимальному решению, с помощью метода восходящего анализа. 4. Составление оптимального решения на основе информации, полученной на предыдущих этапах. Основные свойства задач динамического программирования: Задача обладает свойством оптимальности Небольшое число различных подзадач

>Последовательность Фибоначчи Fn задается формулами: F0 = 0, F1 = 1, Fn = Fn Последовательность Фибоначчи Fn задается формулами: F0 = 0, F1 = 1, Fn = Fn – 1 + Fn – 2 при n > 1. Необходимо найти Fn по номеру n. Рекурсивный метод решения int F(int n) { if (n == 0) return 0; if (n == 1) return 1; else return F(n - 1) + F(n - 2); }

>

>int F(int n){ if (A[n] != -1) return A[n]; if (n == 0) return int F(int n){ if (A[n] != -1) return A[n]; if (n == 0) return 0; if (n == 1) return 1; else { A[n] = F(n - 1) + F(n - 2); return A[n]; } } F[0] =0; F[1] = 1; for (i = 2; i < n; i++) F[i] = F[i - 1] + F[i - 2]; Нисходящее динамическое программирование Восходящее динамическое программирование

>

>9 Задача нахождения наибольшей общей подпоследовательности — задача поиска последовательности, которая является подпоследовательностью нескольких 9 Задача нахождения наибольшей общей подпоследовательности — задача поиска последовательности, которая является подпоследовательностью нескольких последовательностей (обычно двух). Часто задача определяется как поиск всех наибольших подпоследовательностей. Подпоследовательность можно получить из некоторой конечной последовательности, если удалить из последней некоторое множество её элементов (возможно пустое). Например, BCDB является подпоследовательностью последовательности ABCBDAB. Будем говорить, что последовательность Z является общей подпоследовательностью последовательностей X и Y, если Z является подпоследовательностью как X, так и Y. Требуется для двух последовательностей X и Y найти общую подпоследовательность наибольшей длины. Заметим, что НОП может быть несколько. Наибольшая общая подпоследовательность

>10 Строение НОП. Пусть имеются последовательности X = (x1,x2,...,xm) и У = (y1,y2,...,yn), a 10 Строение НОП. Пусть имеются последовательности X = (x1,x2,...,xm) и У = (y1,y2,...,yn), a Z = (z1,z2,... ,zk) –одна из наибольших общих подпоследовательностей. Тогда: Если хm = уn, то zk = хm = уn и Zk-1 — НОП последовательностей Хm-1, Уn-1 2. Если хm ≠ уn и zk ≠ хm, то Z — НОП для Хm-1 и У 3. Если хm ≠ уn и zk ≠ уn, то Z — НОП для Хm и Уn-1 . Наибольшая общая подпоследовательность

>11 с[i,j] – длинна НОП для последовательностей Xi и Yj, если i или j 11 с[i,j] – длинна НОП для последовательностей Xi и Yj, если i или j равно 0, то одна из последовательностей пуста и с[i,j]=0 Рекуррентная формула

>12 Таблицы с и b, которые возвращаются для входных последовательностей X = (A,B,C,B,D,A,B) и 12 Таблицы с и b, которые возвращаются для входных последовательностей X = (A,B,C,B,D,A,B) и У=(В,D,С,А,В,А) Таблица

>13 Заполнение таблицы 13 Заполнение таблицы

>14 Построение НОП 14 Построение НОП

>15 Триангуляция многоугольника - это набор диагоналей, разрезающих многоугольник на треугольники; сторонами этих треугольников 15 Триангуляция многоугольника - это набор диагоналей, разрезающих многоугольник на треугольники; сторонами этих треугольников являются стороны исходного многоугольника и диагонали триангуляции. Задача об оптимальной триангуляции Дан многоугольник Р=(v0, …, vn-1) и весовая функция w, определенная на множестве треугольников. Требуется найти триангуляцию, для которой сумма весов треугольников будет наименьшей w(vi,vj,vk)=|vi vj|+|vj vk|+|vk vi| Оптимальная триангуляция многоугольника

>16 Оптимальная триангуляция многоугольника 16 Оптимальная триангуляция многоугольника

>17 Пусть Т – оптимальная триангуляция n+1-угольника Р=(v0, …, vn). Ребро v0 vn входит 17 Пусть Т – оптимальная триангуляция n+1-угольника Р=(v0, …, vn). Ребро v0 vn входит в один из треугольников триангуляции. Пусть это треугольник (v0 vk vn), где 1<=k<=n-1. Тогда вес триангуляции Т равен весу треугольника (v0 vк vn) + сумма весов триангуляций многоугольников (v0, v1 … vk ) и (vk, vk+1, … vn). Триангуляции указанных многоугольников должны быть оптимальными. Если оптимальные стоимости для таких многоугольников (при разных к) уже вычислены, то остается выбрать оптимальное k. Оптимальная триангуляция многоугольника

>18 m[i,j] –вес оптимальной триангуляции многоугольника (vi-1, vi … vj) Вес оптимальной триангуляции всего 18 m[i,j] –вес оптимальной триангуляции многоугольника (vi-1, vi … vj) Вес оптимальной триангуляции всего многоугольника равен m[1,n] Рекуррентная формула

>19 Оптимальная триангуляция многоугольника 19 Оптимальная триангуляция многоугольника

>20 Оптимальная триангуляция многоугольника 20 Оптимальная триангуляция многоугольника

>21 Оптимальная триангуляция многоугольника 21 Оптимальная триангуляция многоугольника

>22 Оптимальная триангуляция многоугольника 22 Оптимальная триангуляция многоугольника

>23 Оптимальная триангуляция многоугольника 23 Оптимальная триангуляция многоугольника

>24 Представим себе лабиринт без петель, в котором между любыми входами и выходами встречается 24 Представим себе лабиринт без петель, в котором между любыми входами и выходами встречается одинаковое число развилок (узлов), например 3. Во всех узлах пересекается более одной дороги. Каждому переходу в лабиринте соответствует определенное время. Необходимо найти путь от одного из входов к любому выходу, на который требуется минимальное время. Эту задачу можно решить методом полного перебора всех маршрутов, ведущих от фиксированного входа к выходу из лабиринта. При этом число вариантов может оказаться весьма большим, а изменение входа потребует повторного перебора. Принципиально другой подход дает метод ДП. Он предлагает конструировать оптимальный путь по частям, для чего нужно представить задачу как многошаговую. Разместим условно все входы на одной вертикальной прямой, все узлы, которые встречаются первыми на пути от входов к выходам, - на другой прямой. Также поступим со второй и другими группами узлов и, наконец, с выходами. Получим схему лабиринта Лабиринт

>25 Лабиринт 25 Лабиринт

>26 Лабиринт 26 Лабиринт

>27 Лабиринт 27 Лабиринт

>28 Лабиринт 28 Лабиринт