Как найти неповторяющиеся комбинации


Подсчитаем в MS EXCEL количество сочетаний из n элементов по k. С помощью формул выведем на лист все варианты сочетаний (английский перевод термина: Combinations without repetition).

Сочетаниями из n различных элементов по k элементов называются комбинации, которые отличаются хотя бы одним элементом. Например, ниже перечислены ВСЕ 3-х элементные сочетания, взятые из множества, состоящего из 5 элементов {1; 2; 3; 4; 5}:

(1; 2; 3); (1; 2; 4); (1; 2; 5); (1; 3; 4); (1; 3; 5); (1; 4; 5); (2; 3; 4); (2; 3; 5); (2; 4; 5); (3; 4; 5)


Примечание

: Это статья о подсчете количества сочетаний с использованием MS EXCEL. Теоретические основы советуем прочитать в специализированном учебнике. Изучать сочетания по этой статье — плохая идея.

Отличие Сочетаний от Размещений

В отличие от

Размещений

следующие 3-х элементные комбинации (1; 2; 3); (1; 3; 2); (2; 1; 3); (2; 1; 3); (3; 2; 1); (3; 1; 2) считаются одинаковыми, и в набор

Сочетаний

включается только одна из этих комбинаций. Очевидно, что для тех же n и k число

Сочетаний

всегда меньше чем число

Размещений

(так как при размещениях порядок важен, а для сочетаний — нет), причем в k! раз.

Подсчет количества Сочетаний

Число всех

Сочетаний

из n элементов по k можно вычислить по формуле:

Например, количество 4-х элементных комбинаций из 6 чисел {1; 2; 3; 4; 5; 6}  равно 15=6!/(4!(6-4)!)


Примечание

:  Для

Сочетаний

из n элементов по k также используется и другая запись:

В MS EXCEL для подсчета количества комбинаций без повторов существует специальная функция ЧИСЛКОМБ() , английское название функции — COMBIN(). Для предыдущего примера формула =ЧИСЛКОМБ(6;4) , разумеется, также вернет 15. Альтернативная формула для подсчета сочетаний =ФАКТР(6)/ФАКТР(6-4)/ФАКТР(4) .

Очевидно, что k меньше или равно n, т.к. нельзя выбрать из множества элементов n больше элементов, чем в нем содержится (предполагается, что элементы после выбора обратно не возвращаются). При k=n количество сочетаний всегда равно 1.


Примечание

: О Сочетаниях с повторениями (с возвращением элементов) можно прочитать в статье

Сочетания с повторениями: Комбинаторика в MS EXCEL

Вывод всех комбинаций Сочетаний

В файле примера созданы формулы для вывода всех Сочетаний для заданных n и k.

Задавая с помощью

элементов управления Счетчик

количество элементов множества (n) и количество элементов, которое мы из него выбираем (k), с помощью формул можно вывести все Сочетания.

В файле примера не забывайте увеличивать количество строк с формулами, чтобы поместились все ваши комбинации. Для этого выделите последние ячейки с формулами (сочетание №330) и скопируйте их вниз на нужно количество строк. При увеличении строк с формулами размер файла быстро растет, а скорости пересчета листа падает. Если строк 4 тысячи, то размер файла составляет около 2 Мб.

Задача


Автовоз может перевозить по 4 легковые машины. Необходимо перевезти 7 разных машин (LADA Granta, Hyundai Solaris, KIA Rio, Renault Duster, Lada Kalina, Volkswagen Polo, Lada Largus). Сколькими различными способами можно заполнить первый автовоз? Конкретное место машины в автовозе не важно.

Нам нужно определить число

Сочетаний

7 машин на 4-х местах автовоза. Т.е. n=7, а k=4. Оказывается, что таких вариантов =ЧИСЛКОМБ(7;4) равно 35.

Воспользуемся файлом примера (ссылка внизу статьи) , чтобы наглядно убедиться, что мы решили задачу правильно.

Произвольным образом сопоставим маркам машин числовые значения и сделаем сокращения названий марок: LADA Granta (LG=1), Hyundai Solaris (HS=2), …

Выставив в ячейках

В5

и

В6

значения 7 и 4 соответственно, определим все варианты размещений машин в автовозе (см. столбцы AJ:AM).


Примечание

: О Перестановках можно прочитать в статье

Перестановки без повторений: Комбинаторика в MS EXCEL

, а о Размещениях в статье

Размещения без повторений: Комбинаторика в MS EXCEL

.

 

В комбинаторике сочетанием из N различных элементов по M называется набор M элементов, выбранных из множества N элементов. Такие наборы отличаются только вхождением в них M определенных элементов, порядок следования элементов в таком наборе не важен. Наборы, отличающиеся только порядком следования элементов (но не составом), считаются одинаковыми, и этим сочетания отличаются от размещений.

Сочетания без повторений

Задача: Найти все возможные сочетания без повторений из множества элементов {1,2,3} по 2.
Существуют следующие сочетания:

1: 1 2
2: 1 3
3: 2 3

Количество возможных сочетаний без повторений из N элементов по M можно определить по формуле (N≥M):

Количество сечетаний из N по M

что в M! раз меньше соответствующего количества размещений без повторений (поскольку сочетания без повторений не зависят от порядка следования элементов).

Рассмотрим задачу получения всех сочетаний для чисел 1…N по M.

Реализация на С++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

#include <iostream>
using namespace std;
bool NextSet(int *a, int n, int m)
{
  int k = m;
  for (int i = k — 1; i >= 0; —i)
    if (a[i] < n — k + i + 1) 
    {
      ++a[i];
      for (int j = i + 1; j < k; ++j)
        a[j] = a[j — 1] + 1;
      return true;
    }
  return false;
}
void Print(int *a, int n) 
{
  static int num = 1; 
  cout.width(3);
  cout << num++ << «: «;
  for (int i = 0; i < n; i++)
    cout << a[i] << » «;
  cout << endl;
}
int main() 
{
  int n, m, *a;
  cout << «N = «;
  cin >> n;
  cout << «M = «;
  cin >> m;
  a = new int[n];
  for (int i = 0; i < n; i++)
    a[i] = i + 1;
  Print(a, m);
  if (n >= m)
  {
    while (NextSet(a, n, m))
      Print(a, m);
  }
  cin.get(); cin.get();
  return 0;
}

Результат выполнения
Генерация сочетаний без повторений

Сочетания с повторениями

Сочетаниями с повторениями называются наборы по M элементов, в которых каждый элемент множества N может участвовать несколько раз. При этом на соотношение значений M и N не накладывается никаких ограничений, а общее количество сочетаний с повторениями составляет

Количество сочетаний с повторениями

Примером такой задачи может служить выбор M открыток из N всеми возможными способами.

Для генерации сочетаний с повторениями воспользуемся решением для генерации размещений с повторениями, рассмотренным в этой статье.

Реализация на С++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41

#include <iostream>
using namespace std;
bool NextSet(int *a, int n, int m)
{
  int j = m — 1;
  while (a[j] == n && j >= 0) j—;
  if (j < 0) return false;
  if (a[j] >= n)
    j—;
  a[j]++;
  if (j == m — 1) return true;
  for (int k = j + 1; k < m; k++)
    a[k] = a[j];
  return true;
}
void Print(int *a, int n) 
{
  static int num = 1;
  cout.width(3);
  cout << num++ << «: «;
  for (int i = 0; i < n; i++)
    cout << a[i] << » «;
  cout << endl;
}
int main() 
{
  int n, m, *a;
  cout << «N = «;
  cin >> n;
  cout << «M = «;
  cin >> m;
  int h = n > m ? n : m; // размер массива а выбирается как max(n,m)
  a = new int[h];
  for (int i = 0; i < h; i++)
    a[i] = 1;
  Print(a, m);
  while (NextSet(a, n, m))
    Print(a, m);
  cin.get(); cin.get();
  return 0;
}

Результат работы приведенного выше алгоритма:
Генерация сочетаний с повторениями

Генерация сочетаний с повторениями

Назад: Алгоритмизация

Сочетания

  1. Сочетания без повторений
  2. Сочетания с повторениями
  3. Биномиальные коэффициенты и их свойства
  4. Примеры

п.1. Сочетания без повторений

Сочетаниe без повторений – это неупорядоченная ⟨n,k⟩-выборка без повторений,     kn. Общее количество сочетаний без повторений: $$ mathrm{ C_n^k=frac{n!}{(n-k)!k!} } $$

Внимание! Главным отличием сочетаний от размещений является неупорядоченность выборок. Если для размещения выборки (a,b)≠(b,a) не равны, то для сочетания (a,b)=(b,a) – одна и та же выборка.
Сочетания используются тогда, когда порядок выборки не важен.

Например:
Из 10 программистов нужно отобрать 4 для участия в проекте. Сколькими способами это можно сделать?
$$mathrm{ n = 10, k=4 }$$ В данном случае, порядок отбора не важен (выборка неупорядоченная); каждый кандидат может войти только один раз в выборку (выборка без повторений). Поэтому рассматриваем неупорядоченные ⟨10,4⟩ –выборки без повторений. Количество способов отбора равно: $$mathrm{ C_{10}^4=frac{10!}{6! 4!}=frac{10cdot 9cdot 8cdot 7}{1cdot 2cdot 3cdot 4}=210 }$$ Ответ: 210.

п.2. Сочетания с повторениями

Сочетаниe с повторениями – это неупорядоченная ⟨n,k⟩-выборка с повторениями. Общее количество сочетаний с повторениями: $$ mathrm{ overline{C}_n^k=frac{(n+k-1)!}{(n-1)k!} } $$

$$ mathrm{ overline{C}_n^k=C_{n+k-1}{k} } $$

Например:
Нужно отобрать 4 программистов для участия в проекте. Многочисленных претендентов можно разделить на две категории: желающих работать удаленно и предпочитающих работу в офисе. Сколько всего комбинаций из любителей офиса и удалёнки может оказаться в выбранной четвёрке? $$mathrm{ n = 2, k=4 }$$ Порядок отбора не важен; кандидатов из каждой категории может быть несколько или ни одного. Поэтому рассматриваем неупорядоченные ⟨2,4⟩ –выборки с повторениями: $$ mathrm{ overline{C}_2^4=frac{(2+4-1)!}{(2-1)4!}=frac{5!}{4!}=5 } $$ Всего – 5 комбинаций: OOOO,OOOD,OODD,ODDD,DDDD
где O – любитель офиса; D – любитель удалёнки. Напоминаем, что порядок не важен – важен только состав группы.
Ответ: 5.

п.3. Биномиальные коэффициенты и их свойства

Подробно о биноме – см. §28 справочника для 7 класса.
Для n-й степени бинома справедливо выражение: $$ mathrm{ (apm b)^n=a^n+C_n^1a^{n-1}bpm C_n^2a^{n-2}b^2+…+C_n^{n-1}b^n } $$ где (mathrm{C_n^k}) – биномиальные коэффициенты, к оторые одновременно являются количествами сочетаний без повторений из n по k: $$ mathrm{ C_n^k=frac{n!}{(n-k)!k!} } $$ Таким образом, биномиальные коэффициенты можно определять как с помощью треугольника Паскаля, так и с помощью данной формулы.
Заметим, что в литературе также часто встречается обозначение (mathrm{left(_k^nright)}) для биномиальных коэффициентов (mathrm{left(C_n^kright)}).

Свойства биномиальных коэффициентов

Свойство симметрии

$$mathrm{ C_n^k=C_n^{n-k} }$$

Свойство Паскаля

$$mathrm{ C_n^k=C_{n-1}^{k-1}+C_{n-1}^k }$$

Замена индексов

$$mathrm{ C_n^mC_m^{n-k}=C_{n}^{k}C_{k}^{n-m} }$$

Вынесение за скобки

$$mathrm{ C_n^k=frac{n}{k}C_{n-1}^{k-1} }$$

Рекуррентные формулы

begin{gather*}mathrm{ C_n^k=frac{n-k+1}{k}C_{n}^{k-1} }\ mathrm{ C_n^k=frac{n}{n-k}C_{n-1}^k } end{gather*}

Свойство суммы

$$mathrm{ C_n^0+C_n^1+C_n^2+…+ C_n^n=sum_{k=0}^nC_n^k=2^n }$$

Свойство разности

$$mathrm{ C_n^0-C_n^1+C_n^2-…+(-1)^nC_n^n=sum_{k=0}^n(-1)^kC_n^k=0 }$$

Свойства максимума

Если n – четное, то максимальное значение (mathrm{C_n^k}) имеет при (mathrm{k=frac{n}{2}}).
Если n – нечетное, то максимальное значение имеют два коэффициента (mathrm{C_n^k}), при (mathrm{k=frac{n-1}{2}}) и (mathrm{k=frac{n+1}{2}})

Свёртка Вандермонда

$$mathrm{ sum_{r=0}^kC_n^rC_m^{k-r}=C_{n+m}^k }$$

Сумма квадратов

$$mathrm{ sum_{k=0}^n(C_n^k)^2=C_{2n}^n }$$

Взвешенное суммирование

begin{gather*} mathrm{ sum_{k=0}^nnC_n^k=n2^{n-1} }\ mathrm{ sum_{k=0}^nn^2C_n^k=n(n+1)2^{n-2} } end{gather*}

Связь с числами Фибоначчи

$$mathrm{ C_n^0+C_{n-1}^1+…+C_{n-k}^{k}+…+C_{0}^{n}=F_{n+1} }$$

п.4. Примеры

Пример 1. На столе лежит 10 яблок и 5 груш.
1) Сколькими способами можно выбрать 7 фруктов?
2) Сколькими способами можно выбрать 7 фруктов, чтобы среди них было 3 груши?

1) Всего у нас n = 10 + 5 = 15 фруктов. Нужно выбрать k = 7 фруктов.
Порядок выбора не важен, т.е. выборка неупорядоченная. Находим: $$ mathrm{ C_n^k=C_{15}^7=frac{15cdot 14cdot 13cdot 12cdot 11cdot 10cdot 9}{1cdot 2cdot 3cdot 4cdot 5cdot 6cdot 7}=6435 } $$ Существует 6435 способов выбрать 7 фруктов из 15.

2) Выбираем 4 яблока из 10 и 3 груши из 5.
Для яблок: $$ mathrm{ C_{10}^4=frac{10cdot 9cdot 8cdot 7}{1cdot 2cdot 3cdot 4}=210 } $$ Для груш: $$ mathrm{ C_3^5=C_{5}^2=frac{5cdot 4}{1cdot 2}=10 } $$ По правилу произведения, общее количество способов выбрать 4 яблока и 3 груши: $$ mathrm{ C_{10}^3cdot C_{5}^3=210cdot 10=2100 } $$ Ответ: 1) 6435; 2) 2100.

Пример 2. В кондитерском магазине продаётся 4 вида пирожных. Сколькими способами можно купить 7 пирожных? $$ mathrm{ n=4, k=7 } $$ Порядок выбора пирожных неважен – выборка неупорядоченная; пирожные одного вида могут повторяться. Значит, находим количество сочетаний с повторениями: $$ mathrm{ overline{C}_4^7=C_{7+4-1}^7=C_{10}^7=C_{10}^3=frac{10cdot 9cdot 8}{1cdot 2cdot 3}=120 } $$ Ответ: 120

Пример 3. Рота состоит из 3 офицеров, 6 сержантов и 15 рядовых. Сколькими способами можно выбрать из них отряд, состоящий из 1 офицера, 2 сержантов и 5 рядовых?

По всем трём множествам делаем неупорядоченную выборку (т.е., сочетания) без повторений.
Выбираем офицеров: (mathrm{C_3^1=frac31=3})
Выбираем сержантов: (mathrm{C_6^2=frac{6cdot 5}{1cdot 2}=15})
Выбираем рядовых: (mathrm{C_{15}^6=frac{15cdot 14cdot 13cdot 12cdot 11}{1cdot 2cdot 3cdot 4cdot 5}=3003})
По правилу произведения, отряд можно выбрать:
(mathrm{3cdot 15cdot 3003=135135}) способами.
Ответ: 135135.

Пример 4. Найдите сумму
a) (mathrm{C_6^1+C_6^2+C_6^3+C_6^4+C_6^5+C_6^6})
По свойству суммы (mathrm{sum_{k=0}^6C_6^k=2^6}). Получаем: $$ mathrm{ C_6^1+C_6^2+C_6^3+C_6^4+C_6^5+C_6^6=sum_{k=0}^6C_6^k-C_6^0=2^6-1=64-1=63 } $$
б) (mathrm{C_n^1+6C_n^2+6C_n^3}) $$ mathrm{ C_n^1=n, C_n^2=frac{n(n-1)}{2}, C_n^3=frac{n(n-1)(n-2)}{6} } $$ Получаем begin{gather*} mathrm{ C_n^1+6C_n^2+6C_n^3=n+6cdot frac{n(n-1)}{2}+6cdot frac{n(n-1)(n-2)}{6}=}\ mathrm{ =n(1+3(n-1)+(n-1)(n-2))=n(3n-2+n^2-3n+2)=n^3 } end{gather*} Ответ: а) 63; б) n3.

Пример 5. Рассчитайте все (mathrm{C_{10}^k}) по рекуррентной формуле (mathrm{C_{n}^k=frac{n-k+1}{k}C_n^{k-1}}).
Постройте график (mathrm{C_{10}^k(k)}). Сделайте выводы.

Начальное значение (mathrm{C_{10}^0=1}).

0

$$mathrm{ C_{10}^0=1 }$$

1

$$mathrm{ C_{10}^1=frac{10-1+1}{1}C_{10}^0=10 }$$

2

$$mathrm{ C_{10}^2=frac{10-2+1}{2}C_{10}^1=45 }$$

3

$$mathrm{ C_{10}^3=frac{10-3+1}{3}C_{10}^2=120 }$$

4

$$mathrm{ C_{10}^4=frac{10-4+1}{4}C_{10}^3=210 }$$

5

$$mathrm{ C_{10}^4=frac{10-5+1}{5}C_{10}^4=252 }$$

6

$$mathrm{ C_{10}^6=frac{10-6+1}{6}C_{10}^5=210 }$$

7

$$mathrm{ C_{10}^7=frac{10-7+1}{7}C_{10}^6=120 }$$

8

$$mathrm{ C_{10}^6=frac{10-8+1}{8}C_{10}^7=45 }$$

9

$$mathrm{ C_{10}^9=frac{10-9+1}{9}C_{10}^8=10 }$$

10

$$mathrm{ C_{10}^{10}=frac{10-10+1}{10}C_{10}^9=1 }$$

Пример 5

На графике видно симметрию коэффициентов: (mathrm{C_{10}^k=C_{10}^{10-k}}).
Т.к. n = 10 – чётное, максимальный коэффициент при (mathrm{k=frac{n}{2}=5, C_{10}^5=252}).
Можем также проверить свойство суммы: (mathrm{sum_{k=0}^{10}C_{10}^k=1024=2^{10}}).

Рейтинг пользователей

    Сочетанием без повторений называют комбинации, составленные из n элементов по m элементам, которые отличаются друг от друга хотя бы одним элементом.

    Обозначение: $С_n^m$

    Допустим, имеется три буквы А, В и С.

    Составим всевозможные комбинации только из двух букв, которые отличаются друг от друга хотя бы одним элементом: АВ, АС, ВС.

    При подсчете числа сочетаний элементов — порядок не важен.

    Запишем формулу сочетания

    комбинаторика сочетание формула


    Пример 1

    В классе 20 учащихся. Сколькими способами можно выделить двух человек для дежурства? Так как каждая группа учащихся в 2 человека должна отличаться хотя бы одним из учащихся. Отсюда, применим формулу комбинаторики — сочетание, имеем

    пример


    Пример 2

    Пусть имеется множество, содержащие 4 буквы: {А,В,С,D}.

    Записать все возможные сочетания из указанных букв по три.

    Решение

    По формуле сочетания имеем,

     $C_4^3 =frac{{4!}}{{left( {4 — 3} right)!cdot3!}} = frac{{4!}}{{3!}} = frac{{1cdot2cdot3cdot4}}{{1cdot2cdot3}} = 4$


    Пример 3

    В ящике 15 деталей, среди которых 6 бракованных. Наугад выбирается комплект из 5 деталей. Сколькими способами можно составить такой комплект, в котором 2 детали бракованные?

    Решение

    $C_{6}^2$ — количество способов выбора двух бракованных деталей из шести
    $C_{9}^3$ — количество способов выбора трех исправных деталей из девяти
    Тогда количество комбинаций по правилу умножения будет
    $C_{6}^2·C_{9}^3=frac{{6!}}{{(6-2)!2!}}·frac{{9!}}{{(9-3)!3!}}=15·84=1260$


    Пример 4

    Сколькими способами можно распределить три путевки в один санаторий между пятью желающими?

    Решение 
    Так как путевки предоставлены в один санаторий, то варианты распределения отличаются друг от друга хотя бы одним желающим. Поэтому число способов распределения равно


    Пример 5
    В научном конкурсе участвует 12 человек, из них 5 женщин и 7 мужчин. Сколькими способами можно сформировать группу из 7 человек, чтобы в ней было 3 женщины?

    Решение 
    Из пяти женщин необходимо выбрать по три. Следователь, число таких способов отбора равно $С_5^3$

    Число способов отбора мужчин, четырех из семи равно $С_7^4$

    По формуле комбинаторики – сочетания, группу можно сформировать способами:


    Пример 6

    Сколькими способами можно составить суточный наряд по университету из одного офицера, двух сержантов и семи курсантов, если имеется 3 офицера, 6 сержантов и 30 курсантов?

    Решение 
    Число способов выбора офицера: $С_3^1$

    пример

    сержантов $С_6^2$

    пример пример

    по аналогии, число комбинаций выбора курсантов, получаем $С_30^7$

     пример

    Итак, получаем число способов составления суточного наряда

    $$C_3^1cdot{C_6^2}cdot{C_{30}^7}=3cdot15cdot2035800=91611000$$

    Есть массив:

    array(
    0 => 'один',
    1 => 'два',
    3 => 'три',
    4 => 'четыре',
    5 => 'пять',
    6 => 'шесть'
    );

    Как можно найти все возможные неповторяющиеся комбинации из этих слов?
    Т.е. например нужно получить подобное:

    array(
    0 => array('один', 'два', 'три', 'четыре', 'пять', 'шесть'),
    1 => array('один', 'два', 'три', 'четыре', 'пять'),
    3 => array('один', 'два', 'три', 'четыре'),
    4 => array('один', 'два', 'три'),
    5 => array('один', 'два'),
    6 => array('один'),
    7 => array('один', 'три', 'четыре', 'пять', 'шесть'),
    8 => array('два', 'три', 'четыре', 'пять', 'шесть'),
    9 => array('четыре', 'пять', 'шесть'),
    //и т.д.
    );

    Голову сломал уже всю. Не могу сообразить.

    Понравилась статья? Поделить с друзьями:
  • Микротрещины на потолке как исправить
  • Как составить текст описание моя любимая игрушка
  • Как составить аудиторское заключение по законам об аудите
  • Как найти документ в системе консультант плюс
  • Как составить график работы для кафе