2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 MAPLE, разложение числа m на n различных слагаемых
Сообщение31.03.2015, 21:06 
Аватара пользователя


29/12/10
54
Доброго времени суток! Помогите разработать алгоритм и реализовать его в Maple.
Алгоритм должен генерировать кортежи(массивы) длиной не более $n$, сумма элементов которого равна $m$.
Хочу получить в и тоге матрицу такого вида (при $ m=3, n=4$):
$
\begin{bmatrix} 
    3 & 2 & 2 & 2 & 1 & 1 & 1 & 1 & 1 & 1 \\ 0 & 1 & 0 & 0 & 2 & 0 & 0 & 1 & 1 & 0 \\ 0 & 0 & 1 & 0 & 0 & 2 & 0 & 1 & 0 & 1\\ 0 & 0 & 0 & 1 & 0 & 0 & 2 & 0 & 1 & 1 
\end{bmatrix}
$
продолжение
$
\begin{bmatrix} 
    0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\ 3 & 2 & 2 & 1 & 1 & 1 & 0 & 0 & 0 & 0\\ 0 & 1 & 0 & 2 & 0 & 1 & 3 & 2 & 1 & 0\\ 0 & 0 & 1 & 0 & 2 & 1 & 0 & 1 & 2 & 3
\end{bmatrix}
$
Как видите, сумма элементов в столбце равна 3. Есть идеи?

 Профиль  
                  
 
 Re: MAPLE, разложение числа m на n различных слагаемых
Сообщение31.03.2015, 22:31 


19/05/10

3940
Россия
Берете случайные компоненты от нуля до трех , проверяете равна ли сумма 3 и если не равна 3 то выбрасываете и генерите следующий

 Профиль  
                  
 
 Re: MAPLE, разложение числа m на n различных слагаемых
Сообщение01.04.2015, 01:37 
Аватара пользователя


29/12/10
54
mihailm в сообщении #998663 писал(а):
Берете случайные компоненты от нуля до трех , проверяете равна ли сумма 3 и если не равна 3 то выбрасываете и генерите следующий

А как понять, когда остановиться? И где гарантии, что все комбинации разбиения числа были представлены?

 Профиль  
                  
 
 Re: MAPLE, разложение числа m на n различных слагаемых
Сообщение01.04.2015, 03:38 
Заслуженный участник


27/04/09
28128
Если перебирать все возможные кортежи из $0..m^n$, то и гарантия есть, и лексикографический порядок, позволяющий перебрать их все без угадайки, пора ли заканчивать.

Дальше приписываем оптимизации разной степени очевидности (например, частичная сумма стала больше $m$ — дальше можно не считать и переходить к следующему кортежу).

 Профиль  
                  
 
 Re: MAPLE, разложение числа m на n различных слагаемых
Сообщение01.04.2015, 09:19 
Заслуженный участник


25/02/11
1786
В математике это делается за одну строчку, поскольку есть соотв. команды. В мейпле тоже есть combinat[partition], но чуть не хватает параметров. Она умеет раскладывать число на положительные слагаемые. Возьмем число $m+n$, тогда partition(m+n,m+1) даст разбиения на положительные слагаемые с макс. величиной не больше $m+1$. Затем выбрать все векторы, длина которых равна $n$ (есть ли готовая команда?) и вычесть из всего векторы [1,...,1]. А потом для каждого полученного вектора взять все его различные перестановки. Опять же, имеется ли команда? В математике все это есть.

 Профиль  
                  
 
 Re: MAPLE, разложение числа m на n различных слагаемых
Сообщение01.04.2015, 09:45 
Аватара пользователя


29/12/10
54
Vince Diesel в сообщении #998790 писал(а):
В математике это делается за одну строчку, поскольку есть соотв. команды. В мейпле тоже есть combinat[partition], но чуть не хватает параметров. Она умеет раскладывать число на положительные слагаемые. Возьмем число $m+n$, тогда partition(m+n,m+1) даст разбиения на положительные слагаемые с макс. величиной не больше $m+1$. Затем выбрать все векторы, длина которых равна $n$ (есть ли готовая команда?) и вычесть из всего векторы [1,...,1]. А потом для каждого полученного вектора взять все его различные перестановки. Опять же, имеется ли команда? В математике все это есть.

Да, вот это решение мне очень нравится! Спасибо! Тему можно закрывать.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: gris


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group