Сочетания с повторением элементов часто встречаются в повседневной жизни. Например, при выборе набора конфет из коробки со сладостями или заказе блюд в ресторане. Давайте разберемся, что это такое и как вычислять количество таких сочетаний.
Что такое сочетания и их разновидности
В комбинаторике сочетанием называют подмножество элементов данного конечного множества. Сочетания бывают с повторениями и без повторений. Рассмотрим их различия на примере.
Пусть есть множество {A, B, C}. Возможные сочетания без повторений из двух элементов: AB, AC, BC. А сочетания с повторениями будут включать еще AA, BB, CC.
Как видно из примера, в сочетаниях с повторениями один и тот же элемент может встречаться несколько раз, в отличие от обычных сочетаний.
Связь сочетаний с другими понятиями комбинаторики
Сочетания тесно связаны с перестановками и размещениями. Рассмотрим их отличия:
- В перестановках важен порядок элементов
- Размещения подразумевают выбор элементов из большего множества
- В сочетаниях порядок элементов неважен, но могут быть повторы
Таким образом, сочетание с повторением объединяет свойства сочетаний и перестановок одновременно.
Примеры сочетаний с повторениями
Рассмотрим несколько примеров, где могут понадобиться сочетания с повторениями:
-
Выбор шариков из коробки со сладостями, где есть шарики 3 цветов. Можно взять несколько шариков одного цвета.
-
Заказ блюд в ресторане из меню, где есть возможность заказать одно и то же блюдо несколько раз.
-
Раздача одинаковых призов или подарков группе людей, когда некоторые могут получить по 2 или более призов.
Для подсчета сочетаний в подобных ситуациях используется специальная формула.
Формула сочетаний с повторениями
Для подсчета числа сочетаний с повторениями \(\overline{C}_n^k\) используется формула:
\(\overline{C}_n^k = C_{n+k-1}^{k} = \frac{(n+k-1)!}{k!(n-1)!}\)
Где:
- n - число элементов в базовом множестве
- k - длина сочетания, сколько элементов берется
Эта формула выводится на основе соответствия между сочетаниями и перестановками. Рассмотрим подробнее применение формулы для решения задач.
Вывод формулы сочетаний с повторениями
Для вывода формулы \(\overline{C}_n^k\) воспользуемся соответствием между сочетаниями и перестановками. Рассмотрим ситуацию с выбором k шариков из n разных цветов.
Закодируем каждую комбинацию двоичным вектором: будем ставить 1 для каждого выбранного шарика данного цвета. Цвета разделяем нулями. Например, для n=3 цветов и k=5 шариков выбранная комбинация 2 красных, 1 синий, 2 зеленых шарика будет закодирована как 1101011.
Получаем, что разным сочетаниям соответствуют разные двоичные векторы длины n+k-1, содержащие ровно k единиц. И наоборот, каждому такому вектору соответствует уникальное сочетание с повторениями.
Но вектор из k единиц и n-1 нулей - это как раз перестановка с повторениями. Отсюда получаем формулу для \(\overline{C}_n^k\).
Типовые задачи на сочетания с повторениями
Рассмотрим несколько типовых задач, где применима формула \(\overline{C}_n^k\):
-
Найти число способов выбрать k одинаковых предметов n типов. Например, число наборов из k конфет k сортов.
-
Подсчитать число слов (чисел, кодов и т.д.), которые можно составить из n символов длины k с повторениями.
-
Найти число способов разложить число k по n слагаемым. Например, представить 8 в виде суммы 4 натуральных чисел.
Рассмотрим решение таких задач подробнее.
Решение задач на сочетания с повторениями
Для решения задач на \(\overline{C}_n^k\) нужно выделить два параметра:
- n - число типов объектов (символов, слагаемых)
- k - сколько объектов (символов, слагаемых) выбираем
После этого подставляем значения в формулу и считаем результат.
Например, для задачи про конфеты n - число сортов конфет, k - сколько всего конфет выбираем.
Для задачи про представление числа в виде суммы слагаемых: n - значение числа, к которому ищем представление, k - исходное число.
Пример задачи на сочетания с повторениями
Рассмотрим задачу: Сколькими способами можно выбрать 6 шариков из коробки, в которой находится 5 сортов шариков?
Параметры задачи:
- n - число сортов шариков = 5
- k - сколько шариков выбираем = 6
Подставляем в формулу и получаем ответ:
\(\overline{C}_5^6 = \frac{(5+6-1)!}{6!(5-1)!} = \frac{10!}{6!4!} = 210\)
Проверим решение. Всего можно составить шестиэлементные комбинации:
- Из одного вида шариков
- Из двух видов
- Из трех видов
- Из четырех видов
- Из пяти видов
Складывая число вариантов для каждого случая, получаем ответ 210. Значит, решение верное.
Сочетания с повторениями в программировании
Формула сочетаний с повторениями может пригодиться и в программировании. Например, чтобы:
- Подсчитать число всевозможных паролей фиксированной длины из заданного набора символов
- Найти число перестановок массива фиксированной длины с повторяющимися элементами
- Сгенерировать строки или массивы со случайным набором символов заданной длины
Реализация вычисления \(\overline{C}_n^k\) возможна на любом языке программирования, где есть работа с факториалами и целочисленной арифметикой.
Реализация вычисления в Python
Ниже приведена реализация подсчета сочетаний с повторениями на языке Python с использованием встроенного модуля math:
from math import factorial defcombinations_with_repetition(n, k): return factorial(n+k-1) // (factorial(k)*factorial(n-1)) print(combinations_with_repetition(5, 6)) # 210
Аналогичный код можно написать на Java, C#, C++, JavaScript и других популярных языках программирования.