Изменения

Перейти к: навигация, поиск

Динамическое программирование

52 байта добавлено, 22:19, 16 января 2012
Нет описания правки
Наличие оптимальной подструктуры в задаче используется для определения применимости динамического программирования и жадных алгоритмов для решения оной.
[[Файл:FG.png|150px|thumb|Граф подзадач для чисел Фибоначчи]]
Многие задачи, решаемые динамическим программированием, можно определить как поиск в заданном ориентированном ациклическом графе [[Кратчайший_путь_в_ациклическом_графе|кратчайшего пути]] от одной вершины к другой.Например, задача по нахождению кратчайшего пути между некоторыми вершинами графа содержит в себе оптимальное решение подзадач. [[Файл:ULP.JPG|thumb|left|150px|Задача о самом длинном невзвешенном пути]]
Задача по нахождению кратчайшего пути между некоторыми вершинами графа содержит в себе оптимальное решение подзадач. [[Файл:ULP.JPG|thumb|left|150px|Задача о самом длинном невзвешенном пути]]==Отсутствие оптимальной подструктуры==Иногда оптимальная структура подструктура может отсутствовать в задаче.
Рассмотрим задачу, в которой имеется ориентированный граф $G = (V, E)$ и вершины $u, v \in V$, задачу по определению простого пути от вершины $u$ к вершине $v$, состоящий из максимального количества рёбер.
==Принцип оптимальности на префиксе==
[[Файл:ST.jpg|200px|thumb|left]]
Рассмотрим некий необратимый процесс производства и представим его ввиде в виде ориентированного и ациклического графа. Процесс проходит некий ряд состояний. Началом производства (первым состоянием) обозначим вершину графа $S$, а конец производства (последнее состояние) $T$. Процесс требует оптимизации, т.е. требуется найти наиболее оптимальный путь $S \rightsquigarrow T$. Он проходит через вершину графа $U$. Префикс оптимального пути $S \rightsquigarrow U$ является оптимальным путём $S \rightsquigarrow U$. Теперь рассмотрим принцип оптимальности для динамического программирования на префиксе. Итак, имеем некоторый оптимальный путь $S \rightsquigarrow T$, который проходит через $U$. Пусть префикс $ \Delta U$, т.е. путь от $S \rightsquigarrow U$, неоптимален. Тогда заменим неоптимальную часть $S \rightsquigarrow U$ пути $S \rightsquigarrow T$ оптимальной, а путь $U \rightsquigarrow T$ добавим в конец. Получим более оптимальный путь $S \rightsquigarrow T$. Принцип оптимальности для подзадач выполняется. Т.е. чтобы получить оптимальный путь из одной вершины графа в другую, префиксы меньших путей должны быть оптимальными.
==Ссылки==
*Лекция 10.11.2011*Т. Кормен. «Алгоритмы. Построение и анализ» (второе издание, Глава 15)*T. H. Cormen. «Introduction to Algorithms» (third edition, Chapter 15)
*Wikipedia
** [http://en.wikipedia.org/wiki/Optimal_substructure Optimal substructure]
285
правок

Навигация