2014 dxdy logo

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

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


Правила форума


Посмотреть правила форума



Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Число разбиений n на части заданного размера
Сообщение09.12.2020, 10:37 


26/09/17
341
Известна ли формула для числа разбиений $n$ на части заданного размера?
Например сколько разбиений 10 содержат 1 и 3?

P.S. Мне удалось найти только формулу разбиения $n$ на части, не превышающие $m$.

 Профиль  
                  
 
 Re: Число разбиений n на части заданного размера
Сообщение09.12.2020, 12:29 


21/05/16
4292
Аделаида
maximkarimov в сообщении #1495825 писал(а):
сколько разбиений 10 содержат 1 и 3?

Очевидно, это равно количеству разбиений числа 6.

 Профиль  
                  
 
 Re: Число разбиений n на части заданного размера
Сообщение09.12.2020, 12:38 


26/09/17
341
Это общий случай? То есть находим разницу между $n$ и суммой длин всех заданных частей и для нее вычисляем число разбиений (по известной формуле)?

-- 09.12.2020, 14:37 --

kotenok gav в сообщении #1495839 писал(а):
maximkarimov в сообщении #1495825 писал(а):
сколько разбиений 10 содержат 1 и 3?

Очевидно, это равно количеству разбиений числа 6.

Я имел ввиду разбиения, которые содержат ТОЛЬКО 1 и 3. Таких разбиений для 10 ровно 3.
Сории за неаккуратность формулировки!)))

 Профиль  
                  
 
 Re: Число разбиений n на части заданного размера
Сообщение09.12.2020, 13:51 


26/09/17
341
Эмпирически нашел решение для случая разбиения $n$ на 1 и 3 - соответствующий ряд выглядит следующим образом (первый столбец - n, второй - число разбиений n, которые содержат только 1 и 3):
1 - 0
2 - 0
3 - 0
4 - 1
5 - 1
6 - 1
7 - 2
8 - 2
9 - 2
10 - 3
11 - 3
12 - 3
13 - 4
14 - 4
15 - 4
16 - 5
... ...

Любопытно можно ли вывести формулу в общем виде для произвольного набора частей, например: каково число разбиений n, которые содержат ТОЛЬКО числа 2, 4 и 7 (совместно)?

 Профиль  
                  
 
 Re: Число разбиений n на части заданного размера
Сообщение09.12.2020, 14:00 


21/05/16
4292
Аделаида
maximkarimov в сообщении #1495853 писал(а):
1 - 0
2 - 0
3 - 0
4 - 1
5 - 1
6 - 1
7 - 2
8 - 2
9 - 2
10 - 3
11 - 3
12 - 3
13 - 4
14 - 4
15 - 4
16 - 5

$\lfloor\dfrac{n-1}3\rfloor$?

-- 09 дек 2020, 21:31 --

Для случая двух частей всё сводится к простому диафантовому уравнению.

 Профиль  
                  
 
 Re: Число разбиений n на части заданного размера
Сообщение09.12.2020, 14:23 


26/09/17
341
Да, только нужно взять округление вниз до ближайшего целого - floor.
Но общий случай (для произвольного набора частей) я даже представить не в состоянии!)))
К счастью, для моей текущей задачи он не нужен (мне достаточно разбиений n на только 1 и 3).
Спасибо.

 Профиль  
                  
 
 Re: Число разбиений n на части заданного размера
Сообщение09.12.2020, 14:25 
Заслуженный участник
Аватара пользователя


03/06/08
2320
МО
Это же задача о размене?
Мне кажется, она должна быть хорошо изучена.
Я ею никогда не интересовался, но как-то встречал одно интересное решение в книжечке Кац, Улам "Математика и логика".

 Профиль  
                  
 
 Re: Число разбиений n на части заданного размера
Сообщение09.12.2020, 14:26 
Заслуженный участник
Аватара пользователя


21/11/12
1968
Санкт-Петербург
Решается алгоритмически https://dxdy.ru/post1241711.html (если это то что нужно).

 Профиль  
                  
 
 Re: Число разбиений n на части заданного размера
Сообщение09.12.2020, 16:18 


26/09/17
341
пианист в сообщении #1495858 писал(а):
Это же задача о размене?
Мне кажется, она должна быть хорошо изучена.
Я ею никогда не интересовался, но как-то встречал одно интересное решение в книжечке Кац, Улам "Математика и логика".
Да, похоже. Правда мне не просто надо было получить число разбиений n, которые содержат только 1 и 3, но и их список (в данном случае - пар), с указанием числа повторений для каждого элемента.
В итоге, соответствующую функцию реализовал так (на выходе - список пар):
Используется синтаксис Matlab M
function [res] = get1_3(n)
% получаем все разбиения n, которые содержат только 1 и 3 (совместно)
% (число единиц - первое, число троек - второе)
res=zeros(floor((n-1)/3), 2);
t=1;
for i=1:n-3
    if mod(n-i,3)==0
        res(t,1)=i;
        res(t,2)=(n-i)/3;
        t=t+1;
    end
end
end

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

 Профиль  
                  
 
 Re: Число разбиений n на части заданного размера
Сообщение09.12.2020, 16:21 


05/09/16
12065
maximkarimov
Раз можно написать функцию перечисляющую все разбиения, то можно написать и фильтр к ней. Вопрос только в оптимизации.

 Профиль  
                  
 
 Re: Число разбиений n на части заданного размера
Сообщение09.12.2020, 16:32 


26/09/17
341
Вы знаете каким темпом растет число разбиений n? :D Поэтому идея генерить все и фильтровать практического смысла не имеет.

-- 09.12.2020, 17:39 --

Andrey A в сообщении #1495859 писал(а):
Решается алгоритмически https://dxdy.ru/post1241711.html (если это то что нужно).

Нет, по Вашей ссылке речь идет об упорядоченных наборах (о числе композиций n).

 Профиль  
                  
 
 Re: Число разбиений n на части заданного размера
Сообщение09.12.2020, 16:58 


05/09/16
12065
maximkarimov в сообщении #1495868 писал(а):
Вы знаете каким темпом растет число разбиений n? :D Поэтому идея генерить все и фильтровать практического смысла не имеет.

Знаем... Ну, мало ли.

Вот вам oneliner для вашей задачи поиска количества разбиений из единиц и троек, на pari/gp
Код:
part13(n)=my (v=partitions(n,[1,3]),count=0);for(i=1,#v,if(Set(v[i])==[1,3],count++));count

Для $n=100$ считает ответ (равный 33) за 0 миллисекунд.
Для $n=1000$ считает ответ (равный 333) за 1 секунду.
Для $n=10000$ не считает -- не хватает стека в 3 гигабайта.

Вот универсальный oneliner для подсчета любого набора
Код:
part_n_s(n,s)=my (v=partitions(n),count=0);for(i=1,#v,if(Set(v[i])==s,count++));count

его вызывать так part_n_s(10,[1,3]), работает до $n<75$ при стеке в 3 гигабайта.

 Профиль  
                  
 
 Re: Число разбиений n на части заданного размера
Сообщение09.12.2020, 17:22 


26/09/17
341
На выходе число (скаляр) или список, с указанием числа повторений для каждого элемента?
В любом случае - есть к чему стремиться! И мне и онлайнеру! :D
Спасибо.

 Профиль  
                  
 
 Re: Число разбиений n на части заданного размера
Сообщение09.12.2020, 17:28 


05/09/16
12065
maximkarimov в сообщении #1495870 писал(а):
На выходе число (скаляр) или список,

Число (количество). Ну можно и список какой вы хотите, это немного удлиннит код.
maximkarimov в сообщении #1495870 писал(а):
И мне и онлайнеру
Не "онлайнеру", а "oneliner"-у - т.е. программе из одной строчки, не знаю русскоязычного аналога.

 Профиль  
                  
 
 Re: Число разбиений n на части заданного размера
Сообщение09.12.2020, 17:43 


26/09/17
341
Вот здесь http://zonakoda.ru/zadacha-o-razmene-tysyacherublyovoj-kupyury.html очень хорошо показана разница между различными способами решения похожей задачи.

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

Модераторы: Модераторы Математики, Супермодераторы



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

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


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

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