Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MMIO_3_lect5.doc
Скачиваний:
6
Добавлен:
04.09.2019
Размер:
538.62 Кб
Скачать

1.3.3Шаг 2: рекуррентное соотношение

Теперь надо выразить стоимость оптимального решения задачи через стоимости оптимальных решений её подзадач. Такими подзадачами будут задачи об оптимальной расстановке скобок в произведениях для . Обозначим через минимальное количество умножений, необходимое для вычисления матрицы , в частности, стоимость вычисления всего произведения есть .

Числа можно вычислить так. Если , то последовательность состоит из одной матрицы , и умножения вообще не нужны. Стало быть, для . Чтобы подсчитать для , мы воспользуемся информацией о строении оптимального решения, полученной на шаге 1. Пусть при оптимальной расстановке скобок в произведении последним идет умножение на , где . Тогда равно сумме минимальных стоимостей вычисления произведении и плюс стоимость перемножения этих двух матриц. Поскольку для вычисления произведения требуется умножений, то

.

В этом соотношении подразумевается, что оптимальное значение нам известно; на деле это не так. Однако число может принимать всего лишь различных значений: . Поскольку одно из них оптимально, достаточно перебрать эти значения и выбрать наилучшее. Получаем рекуррентную формулу:

(*)

Числа - стоимости оптимальных решений подзадач. Чтобы проследить за тем, как получается оптимальное решение, обозначим через оптимальное место последнего умножения, то есть такое , что при оптимальном вычислении произведения последним идет умножение на Иными словами, равно числу , для которого

1.3.4Шаг 3: вычисление оптимальной стоимости

Пользуясь соотношениями (16.2), теперь легко написать рекурсивный алгоритм, определяющий минимальную стоимость вычисления произведения (т.е. число ). Однако время работы такого алгоритма экспоненциально зависит от , так что этот алгоритм не лучше полного перебора Настоящий выигрыш во времени мы получим, если воспользуемся тем, что подзадач относительно немного: по одной задаче для каждой пары , для которой , а всего . Экспоненциальное время работы возникает потому, что рекурсивный алгоритм решает каждую из подзадач по многу раз, на разных ветвях дерева рекурсии. Такое «перекрытие подзадач» - характерный признак задач, решаемых методом динамического программирования.

Вместо рекурсии мы вычислим оптимальную стоимость «снизу вверх» -

Заполняя таблицу , нужно последовательно решить задачи об оптимальной расстановке скобок для одного, двух, ..., сомножителей. В самом деле, соотношение (*) показывает, что число — стоимость перемножения матриц — зависит только от стоимостей перемножения меньшего (чем ) числа матриц.

Сначала нужно задать для : стоимость перемножения последовательности из одной матрицы равна нулю. Затем вычисляются (с помощью соотношения (*)) значения для — это минимальные стоимости для последовательностей длины 2. Следом рассчитываются значения для — это минимальные стоимости перемножения последовательностей длины 3, и так далее.

1.4Когда применимо динамическое программирование

Укажем два признака, характерных для задач, решаемых методом динамического программирования.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]