2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Автоматизированный перебор возможных комбинаций
Сообщение09.10.2014, 13:10 
Доброго времени суток, уважаемые форумчане. Помогите, пожалуйста, разобраться со следующим вопросом. Пусть есть матрица размерности $2\times 3$
$\begin{pmatrix}
a_{11} &a_{12}  &a_{13} \\ 
a_{21} &a_{22}  &a_{23} 
\end{pmatrix}$

Необходимо перемножить её столбцы между собой следующим образом:
$a_{11}\cdot a_{12}\cdot a_{13}$
$a_{11}\cdot a_{12}\cdot a_{23}$
$a_{11}\cdot a_{22}\cdot a_{13}$
$a_{11}\cdot a_{22}\cdot a_{23}$
$a_{21}\cdot a_{12}\cdot a_{13}$
$a_{21}\cdot a_{22}\cdot a_{13}$
$a_{21}\cdot a_{12}\cdot a_{23}$
$a_{21}\cdot a_{22}\cdot a_{23}$
Таким образом число комбинаций будет равно $2^{3}$. Проблема состоит в том, что если у меня произвольная матрица $M\times N$, то перемножить вручную это не реально. Подскажите, пожалуйста, как можно организовать автоматизированный перебор всех возможных комбинаций, чтобы получить массив-столбец, состоящий из элементов (число элементов будет равно $M^{N}$), полученных путем такого умножения?

 
 
 
 Re: Автоматизированный перебор возможных комбинаций
Сообщение09.10.2014, 14:56 
Аватара пользователя
Например рекурсивно.

 
 
 
 Re: Автоматизированный перебор возможных комбинаций
Сообщение09.10.2014, 15:00 
Аватара пользователя
Afina, Вам совершенно всё равно, на каком языке программирования это будет?

 
 
 
 Re: Автоматизированный перебор возможных комбинаций
Сообщение09.10.2014, 15:14 
Спасибо за ответы. Мне бы желательно в Fortranе, но сначала бы на пальцах понять как это сделать, что-то никак сообразить не могу. Когда два столбца в матрице - это простое перемножение, а вот когда много, то проблематично.

 
 
 
 Re: Автоматизированный перебор возможных комбинаций
Сообщение09.10.2014, 15:24 
Аватара пользователя
Можно и рекурсивно, а можно и закодировать каждый вариант довольно естественным образом числом в $M$-ичной сс.

 
 
 
 Re: Автоматизированный перебор возможных комбинаций
Сообщение09.10.2014, 18:26 
Единственное до чего я смогла дойти для предложенного выше примера. Т.е. взять тройной цикл от 1 до числа элементов в строке и присвоить массивам значения как в ниже указанном фрагменте кода, но тогда получится многомерный массив, зависящий от числа столбцов (в Fortranе максимально - это семимерный массив). То, что после точек естественно не верно, т.к. размерности массивов не совпадают. Натолкните, пожалуйста, на правильную идею.
Используется синтаксис Fortran
do i = 1, 2
do j = 1, 2
do k = 1, 2
a2(i,j) = matrix(i,1)*matrix(j,2)
a3(i,j,k) = a2(i,j)*matrix(k,3)
.............
do l = 4, число столбцов
a4(i,j,k,...) = a3(i,j,k)*matrix(...,4)
a2 = a3
a3 = a4
 

 
 
 
 Re: Автоматизированный перебор возможных комбинаций
Сообщение09.10.2014, 18:41 
Afina в сообщении #916897 писал(а):
то перемножить вручную это не реально.

для размерностей выше $20\times20$ это и автоматически нереально.

-- 09.10.2014, 18:47 --

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

-- 09.10.2014, 19:20 --

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

 
 
 [ Сообщений: 7 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group