4.4. Задача о перемножении матриц
Как известно из высшей математики, умножение матриц ассоциативно, то есть результат перемножения зависит только от порядка матриц и не зависит от расстановки скобок:
(А*В)*С = А*(В*С).
Результат перемножения от расстановки скобок не зависит, зато трудоемкость этого перемножения при разных расстановках скобок может отличаться существенно.
Оценим трудоемкость умножения двух матриц A(p×q) и B(q×r):
C(p×r) = A(p×q)* B(q×r),
каждый элемент матрицу C(p˟r) есть сумма q попарных произведений.
Трудоемкость перемножения двух матриц: T = p·q·r.
Пример. Рассмотрим пример перемножения матриц разными способами:
Пусть имеется четыре матрицы разных размерностей:
М1[10×20], M2[20×50], M3[50×1], M4[1×100].
Решение.
Рассмотрим умножение матриц в следующей порядке:
М1 · (М2 · (М3 · М4) )
[50×1] · [1×100] = [50×100] трудоём. 50·1·100 = 5000
125 000 операций
[20×50]·[50×100] = [20×100] трудоём. 20·100·50 = 100 000
[10×20] · [20×100] = [10×100] трудоём. 10·20·100 = 20 000
Рассмотрим другой вариант умножения матриц:
(М1 · (М2 · М3 ) )· М)
[20×50] · [50×1] = [20×1] трудоём. 20·50·1 = 1000
2200 операций
[10×20]·[20×1] = [10×1] трудоём. 10·20·1 = 200
[10×1] · [1×100] = [10×100] трудоём. 10·1·100 = 1000
При умножении вторым способом действий потребовалось значительно меньше (2200 против 125 000). Придумаем формулу метода ДП применительно к данной задачу.
Допустим, нам необходимо оптимальным образом перемножить 5 матриц. i-тая матрица имеет размерность [ri-1× ri]. Смотрим, где стояла последняя пара скобок: существует 4 варианта:
(M1)·(M2·M3·M4·M5) [r0×r1] [r1×r5] | (1) |
(M1·M2) ·(M3·M4·M5)
[r0×r2] [r2×r5] | (2) |
(M1·M2·M3) ·(M4·M5) [r0×r3] [r3×r5] | (3) |
(M1·M2·M3·M4) ·(M5) [r0×r4] [r4×r5] | (4) |
При первом варианте расстановок скобок нам потребуется
f(1,1) + f(2,5) + r0r1r5 операций.
Здесь f(k,l) – минимальное количество действий, за которое можно вычислить произведение матриц с k-той по l-тую.
Для последующих трех вариантов:
f(1,2) + f(3,5) + r0r2r5
f(1,3) + f(4,5) + r0r3r5
f(1,4) + f(5,5) + r0r4r5
операций соответственно.
Здесь f(k,p) – минимальное количество действий, за которое можно вычислить произведение матриц с k-той по p-тую.
Выбираем минимум среди всех этих чисел и получаем общую формулу:
Замечание. В отличии от задачи о рюкзаке, где была динамика по одному параметру (грузоподъемности), здесь динамика по двум параметрам: начало и конец блока перемножаемых матриц.
Итак, в окончательном виде эта задача решается с помощью следующего алгоритма.
Заполняем трудоемкости матриц: Трудоемкости по главной диагонали равны 0:
for i:=0 to n do f(i,i):=0;
Внешний цикл по t – длине перемножаемого блока;
Средний цикл по k – местоположению блока;
Внутренний – поиски минимума по j.
for t:=1 to n-1 do
for k:=1 to n-1 do
Для матриц М1, М2, М3, М4 из рассмотренного выше примера расставим скобки оптимальным образом.
f(1,1) | f(1,2) | f(1,3) | f(1,4) |
| f(2,2) | f(2,3) | f(2,4) |
|
| f(3,3) | f(3,4) |
|
|
| f(4,4) |
Итак, заполняем такую матрицу в следующем порядке:
f(1,1) = f(2,2) = f(3,3) = f(4,4) = 0
f(1,2) = min (f(1,1) + f(2,2) + 10·20·50) = 10 000
f(2,3) = min (f(2,2) + f(3,3,) + 20·50·1) = 1000
f(3,4) = min (f(3,3) + f(4,4) + 50·1·100) = 5000
f(1,3) = min (f(1,1) + f(2,3) + 10·20·1; f(1,2) + f(3,3) + 10·50·1) = 1200
f(2,4) = min (f(2,2) + f (3,4) +20·50·100; f(2,3) + f (4,4) + 20·1·100) = 3000
f(1,4) = min (f(1,1) + f(2,4) + 10·20·100; f(1,2) + f(3,4) + 10·50·100; f(1,3) + f(4,4) + 10·1·100) = 2200
После вычисления оптимальных трудоемкостей восстанавливаем оптимальную расстановку скобок.
Смотрим, где достигнут минимум в f(1,4). Он достигнут в f(1,3) + f(4,4) + 10·1·100. Следовательно, последними скобками будут (М1 М2 М3)(М4).
Далее смотрим, где достигнут минимум в f(1,3). Он достигнут в f(1,1) + f(2,3) + 10·20·1. Т.е. следующими скобками будут (М1 (М2 М3) М4.
Т.к. у нас 3 вложенных цикла, длина каждого порядка n (n – количество перемножаемых матриц), то трудоемкость решаемой задачи методом ДП T = C ·n3.
При решении этой задачи методом прямого перебора получаем не полиноминальную трудоемкость, а намного большую. То же самое получаем и для задачи о рюкзаке: её решение методом динамического программирования имеет полиномиальную трудоемкость (2 вложенных цикла), а методом прямого перебора получаем неполиномиальную трудоемкость.
Домашнее задание №6 (А, Б)
А) Задача грабителя (о рюкзаке). Имеет склад, на котором присутствует ассортимент товаров ( каждого товара неограниченный запас). У каждого товара своя стоимость Ci и масса mi. Выбрать набор товаров так, чтобы его суммарных вес не превышал заданную грузоподъемность М притом, что суммарная стоимость этого набора товаров была бы максимальной.
Номер товара, i | mi | Ci |
1 | 5 | 9 |
2 | 7 | 13 |
3 | 11 | 21 |
Максимальная грузоподъемность: М = 23; 24.
Б) Расставить скобки при перемножении матриц оптимальным образом.
М1=[10×20], M2=[20×5], M3=[5×4], M4=[4×30], M5=[30×6].
- Основные понятия. Справочный материал
- Основные понятия
- 1.2. Справочный материал. Сравнение скорости роста основных функций
- 2 Новые быстрые версии старых алгоритмов
- 2.1. Сортировки массивов
- 2.1.1 Метод прямого выбора (SelectSort)
- 2.1.2 Быстрая сортировка методом двоичных вставок (MergeSort)
- 2.2. Преобразование Фурье (бпф)
- 2.2.1. Дискретное преобразование Фурье
- 2.2.2. Полубыстрое преобразование Фурье (ппф)
- 2.2.3. Быстрое преобразование Фурье (бпф)
- 2.3. Быстрая свертка
- 2.3.1. Понятие свертки
- 2.3.2. Обычный и быстрый алгоритм свертки
- 2.4. Быстрое умножение
- 2.4.1. Быстрое умножение чисел
- 1 Суммирование
- 4 Произведения чисел вдвое меньшей
- 2.4.2. Быстрое умножение матриц
- 2.4.3. Очень быстрое умножение числе (алгоритм Шенхаге – Штрассена)
- 3. Задачи на графах
- 3.1. Справочный материал
- 3.2. Поиск минимального остова в связном неориентированном взвешенном графе
- 3.3. Нахождение кратчайшего расстояния
- 3.3.1. Алгоритм Форда – Беллмана
- 3.3.2. Алгоритм Дейкстры
- 3.4. Нахождение диаметра, радиуса и центра графа
- 3.5. Задача об изоморфизме графов
- 3.6. Задача коммивояжера. Её решение методом ветвей и границ.
- Задачи динамического программирования
- Задачи динамического программирования. Её решение методом динамического программирования.
- 4.2. Задача об оптимальном наборе самолетом скорости и высоты
- 4.3. Задача грабителя (задача о рюкзаке)
- 4.4. Задача о перемножении матриц
- 5 Классы p и np
- 5.1 Машина Тьюринга
- 5.2 Недетерменированные машины Тьюринга(ндмт)
- 5.3 Сводимость. Np-полнота.
- 5.4 Иерархия по сложности. Труднорешаемые задачи.
- Классы сложности.
- 6 Неразрешимые задачи
- 6.1 Новая модель алгоритма вычислений.
- 6.2 Нумерация программ
- 6.3 Неразрешимые проблемы
- 6.4 Теорема об ускорении
- Лабораторные работы
- Расчетно-графическое задание
- Ответы к домашним заданиям