Количество умножений чисел, при умножении матриц |
Количество умножений чисел, при умножении матриц |
samec |
Сообщение
#1
|
Бывалый Группа: Пользователи Сообщений: 180 Пол: Мужской Реальное имя: Юра Репутация: 1 |
Даны три матрицы A(m1,n1); B(m2,n2); C(m3,n3). Как мне вычислить количество умножений чисел, которое потребуется для умножения матриц, например, следующим образом (A*B)*C ??
|
samec |
Сообщение
#2
|
Бывалый Группа: Пользователи Сообщений: 180 Пол: Мужской Реальное имя: Юра Репутация: 1 |
это выяснил, если:
A(k,n)*B(n,m) = AB(k,m) число умножений k*n*m AB(k,m)*C(m,l) = ABC(k,l) число умножений k*m*l в результате k*n*m + k*m*l. А вот если матриц у меня от 1 до n штук, то как мне расставить скобки при умножении этих матриц, чтобы количество умножений чисел было минимальным ?? |
Lapp |
Сообщение
#3
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Могу дать тебе половину решения..
Вот программа, которая выдает само минимальное количество умножений, но не говорит, как расставить скобки. Попробуй разобраться с ней и добавить расстановку скобок . Начальные данные задаются в константе Dim. При этом, поскольку соседние размерности одинаковые, я не повторяю их. Например, если у тебя есть 5 матриц таких размеров: (3,4), (4,5), (5,6), (6,7), (7,2) - то в массив Dim (его размер будет 5+1=6) надо занести: 3, 4, 5, 6, 7, 2 (Этот пример как раз использован в программе) const Можешь задавать вопросы.. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
samec |
Сообщение
#4
|
Бывалый Группа: Пользователи Сообщений: 180 Пол: Мужской Реальное имя: Юра Репутация: 1 |
Почти такой же пример (только не рекурсивный вариант, в книге сказано, что рекурсивный вариант алгоритма экспоненциально зависит от количества матриц, что не лучше полного перебора...) я нашёл в книге Кормена: Алгоритмы. Построение и анализ.
Вот так я его реализовал на паскале:
В матрице m в элементе [1..n], где n - количество матриц, хранится минимальное количество умножений. В матрице s, в элементе s[i,j] - записано место последнего умножения при оптимальной расстановке скобок. Также в этой книге есть процедура, реализующая произведение матриц с оптимальной расстановкой скобок, вот её псевдокод: Код Matrix-Chain-Multiply(A,s,i,j); 1 if j>i 2 then X<-Matrix-Chain-Multiply(A,s,i,s[i,j]) 3 Y<-Matrix-Chain-Multiply(A,s,s[i,j]+1,j) 4 return Matrix-Multiply(X,Y) 5 else return Ai Думаю, что для расстановки скобок переделать нужно именно эту процедуру...но вот как? что то у меня не получается ... помогите, пожалуйста.... Сообщение отредактировано: samec - |
Текстовая версия | 22.12.2024 9:16 |