2014 dxdy logo

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

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




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3, 4, 5
 
 Re: Создание массивов чисел с заданной суммой элментов
Сообщение06.06.2015, 22:58 


07/08/14
4231
arseniiv в сообщении #1024165 писал(а):
Вам так жутко надо параллелить получение комбинаций?

Ну вообще хотелось бы. :-) Все таки массив длиной $20$ это совсем маленький массивчик.

 Профиль  
                  
 
 Re: Создание массивов чисел с заданной суммой элментов
Сообщение06.06.2015, 23:03 
Заслуженный участник


27/04/09
28128
Но ведь тут же дело не в том, какова длина одного массива, а какова длина всех массивов. При маленьком числе элементов, как будто, нет пользы от параллельности, а при большом есть вред из-за страшного использования памяти. Если только в серединке есть максимум — может, ну его? :-)

 Профиль  
                  
 
 Re: Создание массивов чисел с заданной суммой элментов
Сообщение06.06.2015, 23:20 
Заслуженный участник
Аватара пользователя


19/12/10
1546
upgrade в сообщении #1024162 писал(а):
я то подумал, что можно как то вычислить по входным данным что считать - комбинации у которых сумма $5$ или комбинации у которых сумма не $5$, чтобы их затем отбросить.

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

-- 06 июн 2015, 23:25 --

Кстати, предложенный алгоритм можно и распараллелить.

 Профиль  
                  
 
 Re: Создание массивов чисел с заданной суммой элментов
Сообщение06.06.2015, 23:28 
Заслуженный участник


11/05/08
32166
aa_dav в сообщении #1023955 писал(а):
Рекурсивный алгоритм "входит в стек" на величину $n$ максимум.

Не исключено. Однако не исключено и наоборот. Алгоритма-то предъявлено не было. Во всяком случае, не было предъявлено спецификации рекурсивной процедуры. Насчёт гаданий же -- я, конечно, экстрасенс, но не до такой степени.

 Профиль  
                  
 
 Re: Создание массивов чисел с заданной суммой элментов
Сообщение07.06.2015, 05:16 


11/12/14
893
ewert в сообщении #1024203 писал(а):
Алгоритма-то предъявлено не было.


А это что было:
Цитата:
Вот пусть у нас массив из $n$ элементов и заданная сумма $N$.
Рассматриваем какие значения может принимать 1-ая ячейка. Очевидно что от $1$ до $N-n+1$, т.к. если будет больше, то даже одни лишь единицы в последующих ячейках превысят сумму.
Значит делаем цикл по значениям в первой ячейке от 1 до $N-n+1$, а дальше в каждой итерации этого цикла сводим задачу к такой же на $n-1$ ячеек (остаток массива) и $N$ минус текущее значение в этой самой первой ячейке. Т.е. запускаем алгоритм на остаток массива просто с текущими лимитами и всё.

?

 Профиль  
                  
 
 Re: Создание массивов чисел с заданной суммой элментов
Сообщение07.06.2015, 20:44 
Заслуженный участник


11/05/08
32166
А что это было?...

Тут мало того, что нет ни одной рекурсии -- тут даже ни одной процедуры не специфицировано.

 Профиль  
                  
 
 Re: Создание массивов чисел с заданной суммой элментов
Сообщение07.06.2015, 22:04 


17/05/14
10
whitefox в сообщении #1023552 писал(а):
Пусть массив имеет длину $n,$ и пусть заданное число равно $m,$ нужно перечислить все способы представления числа $m$ в виде суммы $n$ целых положительных чисел.

Необходимым условием разрешимости этой задачи является условие $m\geqslant n.$

Будем перечислять нужные представления в лексикографическом порядке. Для удобства перейдём к эквивалентной задаче — перечислить в лексикографическом порядке все представления числа $p=(m-n)$ в виде суммы $n$ целых неотрицательных чисел. Для обратного перехода к исходной задаче нужно будет каждый элемент найденного представления увеличить на 1.

Будем нумеровать элементы массива $a$ от $1$ до $n.$ Исходное состояние массива $a$ $[0,0,\dots,0,0,p],$ а заключительное $[p,0,0,\dots,0,0].$

  1. присвоить массиву $a$ значение $[0,0,\dots,0,0,p];$
  2. напечатать массив $a;$
  3. выполнить $i:=n;$
  4. пока $a[i]=0$ выполнять $i:=i-1;$
  5. если $i=1,$ то завершить работу, иначе выполнить $t:=a[i]-1,\;a[i]:=0,\;i:=i-1;$
  6. выполнить $a[i]:=a[i]+1,\;a[n]:=t;$
  7. вернуться на шаг 2.


Огромное спасибо за помощь!

 Профиль  
                  
 
 Re: Создание массивов чисел с заданной суммой элментов
Сообщение07.06.2015, 22:55 
Заслуженный участник
Аватара пользователя


19/12/10
1546
ilya_msu, если время критично, то ewert показал как данный алгоритм сделать линейным:

  1. присвоить массиву $a$ значение $[0,0,\dots,0,0,p];$
  2. выполнить $i:=n;$
  3. напечатать массив $a;$
  4. если $i=1,$ то завершить работу;
  5. выполнить $a[i]:=a[i]-1,\;a[i-1]:=a[i-1]+1;$
  6. если $a[i]=0,$ то выполнить $i:=i-1$ и вернуться на шаг 3;
  7. если $i=n,$ то вернуться на шаг 3;
  8. выполнить $a[n]:=a[i],\;a[i]:=0,\;i:=n;$
  9. вернуться на шаг 3.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 68 ]  На страницу Пред.  1, 2, 3, 4, 5

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



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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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