logo search
tsvpis

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-тую.

Выбираем минимум среди всех этих чисел и получаем общую формулу:

Замечание. В отличии от задачи о рюкзаке, где была динамика по одному параметру (грузоподъемности), здесь динамика по двум параметрам: начало и конец блока перемножаемых матриц.

Итак, в окончательном виде эта задача решается с помощью следующего алгоритма.

  1. Заполняем трудоемкости матриц: Трудоемкости по главной диагонали равны 0:

for i:=0 to n do f(i,i):=0;

  1. Внешний цикл по 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. Т.е. следующими скобками будут 12 М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].