Изменения

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

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

25 байт убрано, 01:19, 3 декабря 2011
Нет описания правки
|definition = «Если есть оптимальное решение для некоторой подзадачи, которая возникает в процессе решения задачи, то именно его нужно использовать для решения задачи в целом»}}
==Принцип оптимальности для динамического программирования на префиксе==
[[Файл: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$. Принцип оптимальности для подзадач выполняется. Т.е. чтобы получить [[Кратчайший путь в ациклическом графе|оптимальный путь из одной вершины графа в другую]], префиксы меньших путей должны быть оптимальными.</wikitex>  
=== Примеры задач ===
:* [[Кратчайший путь в ациклическом графе]]
== Принцип оптимальности на подотрезках==
[[Категория:Дискретная математика и алгоритмы]]
[[Категория:Динамическое программирование]]
</wikitex>

Навигация