285
правок
Изменения
Нет описания правки
<wikitex>
==Оптимальность для подзадачПроцесс разработки алгоритмов динамического программирования==Важнейшее свойство задач, которое позволяет решать их с помощью динамического программирования это оптимальность для подзадач. В зависимости от формулировки процессе составления алгоритма задачис динамическим программированием, будь то динамическое программирование на отрезке, на префиксе, на дереве, термин оптимальности для подзадач может быть различным, но, в целом, он формулируется тактребуется следовать последовательности из четырёх шагов:{{Определение# Описать структуру оптимального решения# Рекурсивно определить значение оптимального решения|definition = «Если есть оптимальное решение для некоторой подзадачи, которая возникает в процессе # Вычислить значение оптимального решения задачи, то именно его нужно использовать для с помощью метода восходящего анализа# Составление оптимального решения задачи в целом»}}на основе полученной информации
==Оптимальная подструктура==
[[Файл:C1515.JPG|320px|thumb|Производственная задача по определению оптимального способа сборки ]]
Задачи, решаемые динамическим программированием, можно определить как поиск в заданном ориентированном ациклическом графе [[Кратчайший_путь_в_ациклическом_графе|кратчайшего пути]] от одной вершины к другой.
Задача по нахождению кратчайшего пути до некоторой вершины между некоторыми вершинами графа (например, $S$<sub>$i,j$</sub>) содержит в себе оптимальное решение подзадач (кратчайший путь до $S$<sub>$1,j-1$</sub> или $S$<sub>$2,j-2$</sub>). Это свойство называется оптимальной подструктурой. Наличие у задачи этого свойства определяет её решаемость динамическим программированием. ==Оптимальность для подзадач==Важнейшее свойство задач, которое позволяет решать их с помощью динамического программирования, это оптимальность для подзадач. В зависимости от формулировки задачи, будь то динамическое программирование на отрезке, на префиксе, на дереве, термин оптимальности для подзадач может быть различным, но, в целом, формулируется так:{{Определение|definition = «Если есть оптимальное решение для некоторой подзадачи, которая возникает в процессе решения задачи, то именно его нужно использовать для решения задачи в целом»}}
==Принцип оптимальности для динамического программирования на префиксе==
*[http://ru.wikipedia.org/wiki/%D0%96%D0%B0%D0%B4%D0%BD%D1%8B%D0%B9_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC#.D0.9E.D0.BF.D1.82.D0.B8.D0.BC.D0.B0.D0.BB.D1.8C.D0.BD.D0.BE.D1.81.D1.82.D1.8C_.D0.B4.D0.BB.D1.8F_.D0.BF.D0.BE.D0.B4.D0.B7.D0.B0.D0.B4.D0.B0.D1.87|Википедия, Жадный алгоритм]
*Т. Кормен. «Алгоритмы. Построение и анализ» (2<sup>ое</sup>издание, Глава 15)
*T. H. Cormen. «Introduction to Algorithms» (3<sup>rd</sup>edidion, Chapter 15)
[[Категория:Дискретная математика и алгоритмы]]
[[Категория:Динамическое программирование]]