
- •Формальное описание алгоритма 1 задачи “Ближайшая пара”
- •Лекция 2 Задача о битоническом пути
- •Битонический путь
- •Лекция 3 Динамическое программирование и оптимизационная задача перемножения матриц.
- •2. Алгоритмизация описанного процесса на основе (2) и (3).
- •Лекция 4 Оптимальная триангуляция треугольника.
- •Лекция 5
- •Циркуляция.
- •Лекция 6 Многополюсные максимальные потоки
- •Алгоритм гомори—ху
- •Лекция 7 Задача распределения капитала
- •1. Случай запрета коротких позиций.
- •2. Случай разрешения коротких позиций.
- •Случай наличия безрискового актива.
- •Лекция 8 Потоковые алгоритмы.
- •Лекция 9. Алгоритм Гомори.
- •Лекция 10 Многополюсные минимальные потоки.
- •Лекция 11 доминирующие множества и абсолютный центр.
- •Доминирующие множества.
- •Нахождение абсолютного p-центра
- •Ленкция 12 простой (классический) генетический алгоритм.
- •Лекция 13 Стохастическая задача размещения-распределения объектов.
Лекция 3 Динамическое программирование и оптимизационная задача перемножения матриц.
Пусть дано n-матриц (A1, А2,…, An),согласованных по размерам, т.е.
Ai
pi-1*pi,
i=
,
p=(p0, p1,…, pn).
Требуется определить порядок перемножения матриц, используя алгоритм перемножения двух матриц, при котором общее число операций перемножения будет минимальным.
=
Cij=
=
,
=
r*q*s – общее число операций перемножения.
Порядок перемножения матриц:
А1*А2*А3
либо ((А1*А2)*А3);
либо (А1*(А2*А3));
Например, матрица А1 имеет размерность 10*5, А2 – размерность 5*6 и матрица А3 – размерность 6*2. Тогда проведя расчеты обоими способами, получим:
10*5*6=300, 10*6*2=120, то есть 420 операций умножения.
5*6*2=60, 10*5*2=100, то есть 160 операций умножения.
Определение: Произведением с правильно расставленными скобками n –матриц называется либо одна матрица (если n =1), либо заключенное в круглые скобки произведение с правильно расставленными скобками.
Сколько существует способов правильной расстановки скобок Q(n)?
Оценим это число снизу. Не нарушая общности, будем считать, что n кратно трем, т.е. n=3k.
Разобьем всю последовательность наших матриц на тройки.
…
Таких троек k-штук.
Оценим снизу: Q(n) = 2n/3 (1)
Можно оценить по-другому.
Рассмотрим два способа расстановки скобок:
A1*(A2*…*An) или (A1*…*An-1)*An.
Число способов расстановки скобок будет не меньше, чем в скобках первого и второго представлений, т.е:
Q(n)
Q(n-1)+Q(n-1) = 2Q(n-1)
22Q(n-2)
23Q(n-3)
…
2n-2Q(2)
2n-2.
Видим, что число вариантов в задаче экспоненциально зависит от размерности задачи (n):
Q(n)=
(n).
Это значит, что полный перебор вариантов
даст экспоненциальный алгоритм.
Применим к задаче метод динамического программирования.
1. Структура оптимального решения задачи.
Введем некоторое обозначение.
Ai..j – результат перемножения матриц Ai *Ai+1*…*Aj.
В частном случае, когда i=j, Ai..j=Aii.
Если i<j, то Ai..j=(Aik*Ak+1..j)
k- индекс матрицы, который определяется на последнем шаге.
A1..3=((A1*A2)*A3)=(A1..2*A3), где A1..2 =(A1*A2).
Si..j – некоторый способ расстановки парных скобок, то есть это и есть решение задачи.
Обозначим через F(Si..j) –число операций умножения.
Теорема. («Структура оптимального решения»).
Пусть S*i..j – оптимальный способ расстановки скобок в задаче, которому соответствует минимальное число операций умножения.
F
=
F(S*i..n).
Пусть на некотором шаге перемножаются
матрицы A1..
k*Ak..
n
=>
=> Части этого (исходного) способа S*1..k* и S*k*+1..n – являются оптимальными расстановками скобок при вычислении таких произведений: A1..k* и Ak*+1..n.
Доказательство.
F = F(S*1..n) = F(S*i..k*)+ F(S*k*+1..n)+p0*pk*pn (1) (Это вытекает из условий теоремы.).
Если предположить, что один из подспособов не является оптимальным, т.е., например,
S*1..k* - не оптимально. Тогда , заменив его на оптимальный S**1..k*, получим, что в формуле (1) уменьшится первое слагаемое, что приведет к уменьшения всего выражения, что даст противоречие с тем, что S*1..n – оптимальное решение. То есть пришли к противоречию, теорема доказана.●
Введем подзадачу, связанную с вычислением Ai..j. m[i, j] – элемент массива, который определяет оптимальное значение целевой функции подзадачи, т.е. m[i, j]=F(S*i..j).
Чтобы решить исходную задачу, надо решить две подзадачи, у каждой из которых также возникает две подзадачи, и т.д., то есть эту структуру можно представить в след виде:
A1..n
A1..k* Ak*+1..n
A1..k** Ak**+1..k* … …
Выводим рекуррентное соотношение.
(2)
m[i,
j]
=
(3) s[i,j]:= k* -это то k, при котором указанный минимум достигается.
S – функция, определяющая допустимое оптимальное решение.