Если поместил не туда - прошу переместить куда надо (и удалить эту строку из поста).
Иногда возникает необходимость подсчитать количество вариантов раскладки шаров по урнам и аналогичных.
В книжке
Кнут "Искусство программирования, Том 4" это называется, вслед за книжкой
Стенли "Перечислительная комбинаторика", двенадцатизадачие или "двенадцатиричный путь".
Красивые названия, с простой сутью. Каждая из 12
апостолов задач отвечает на вопрос "сколько существует вариантов сделать то-то и то-то".
Не отвлекаясь на вывод и обоснование формул, приведу только решения как
вычислить количество вариантов используя систему компьютерной алгебры
PARI/GP. Все задачи даются в терминах раскладок шаров по урнам. Шары и урны будем называть различимыми (и как синонимы -- "пронумерованы", "помечены") или нет (синонимы "непронумерованы", "непомечены") в зависимости от того нанесены ли на них какие-то метки, цвета, номера и т.п., т.е. имеет ли значение какой именно шар кладем в какую именно урну.
Порядок следования как шаров в каждой урне, так и порядок следования урн не учитывается.Шары и урны пронумерованы (помечены).1. Сколько существует способов разложить
n пронумерованных шаров по
k пронумерованным урнам?
N=n^k2. Сколько существует способов разложить
n пронумерованных шаров по
k пронумерованным урнам так, чтобы в каждой урне было не более одного шара (при условии
)?
N=binomial(k,n)*k!3. Сколько существует способов разложить
n пронумерованных шаров по
k пронумерованным урнам так, чтобы в каждой урне было не менее одного шара (при условии
)?
N=k!*stirling(n,k,2)Шары не пронумерованы (одинаковые), урны пронумерованы.4. Сколько существует способов разложить
n непомеченных шаров в
k помеченных урн?
N=binomial(n+k-1,n)5. Сколько существует способов разложить
n непомеченных шаров в
k помеченных урн так, чтобы в каждой урне было не более одного шара (ясно, что должно быть
)?
N=binomial(k,n)6. Сколько существует способов разложить
n непомеченных шаров в
k помеченных урн так, чтобы в каждой урне было не менее одного шара (при условии
)?
N=binomial(n-1,n-k) или
N=binomial(n-1,k-1)Шары пронумерованы (помечены), урны не пронумерованы (одинаковые).7. Сколько существует способов разложить
n пронумерованных шаров по
k непомеченным (одинаковым) урнам?
N=sum(i=1,k,stirling(n,i,2))8. Сколько существует способов разложить
n пронумерованных шаров по
k непомеченным (одинаковым) урнам так, чтобы в каждой урне было не более одного шара (при условии
)?
N=19. Сколько существует способов разложить
n пронумерованных шаров по
k непомеченным (одинаковым) урнам так, чтобы в каждой урне было не менее одного шара (при условии
)?
N=stirling(n,k,2)Шары и урны не пронумерованы (одинаковые).10. Сколько существует способов разложить
n одинаковых шаров в
k одинаковых урн?
N=#partitions(n,,[1,k])11. Сколько существует способов разложить
n одинаковых шаров в
k одинаковых урн так, чтобы в каждой урне было не более одного шара (при условии
)?
N=112. Сколько существует способов разложить
n одинаковых шаров в
k одинаковых урн так, чтобы в каждой урне было не менее одного шара (при условии
)?
N=#partitions(n,,[k,k])Обсуждать вроде особо нечего, то есть оставляю это как справку, но если есть ошибки, прошу указать на них.