Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
пособие рязанова.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
1.55 Mб
Скачать

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

Сочетанием с повторениями из n элементов по k называется мультимножество мощности k, составленное из элементов n-элементного множества.

Например, из элементов множества М={1,2,3} можно составить такие сочетания по два с повторениями: {1,1}, {1,2}, {1,3}, {2,2}, {2,3}, {3,3}.

Теорема 2.7. Количество различных сочетаний из n элементов по k с повторениями равно .

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

1100, 1010, 1001, 0110, 0101, 0011.

Таким образом, каждому сочетанию с повторениями из n по k соответствует последовательность из k единиц и n-1 нулей. Количество таких последовательностей равно числу способов, которыми можно выбрать n-1 мест для нулей из n+k-1 общего числа мест ( ), или, то же самое, - числу способов выбора k мест для единиц из n+k-1 мест ( ).

Рассмотрим алгоритм порождения сочетаний с повторениями в неубывающем лексикографическом порядке. Сочетания с повторениями из трёх элементов по три ( ), в неубывающем лексикографическом порядке запишутся следующим образом:

111 133

112 222

113 223

122 233

123 333

Сочетания с повторениями в лексикографическом порядке можно порождать, используя метод поиска с возвращением. Начиная с 1-го места будем последовательно формировать элементы сочетания F. На

первое место в сочетании можно ставить элементы из множества {1..n}. Формирование i-го элемента сочетания опишем рекурсивным алгоритмом 2.7, блок-схема которого представлена на рис.2.15. В цикле перебираются элементы множества {b..n}, которые можно поставить на i-ое место. Если на i-ое место поставлен элемент x, то минимальный элемент, который можно поставить на i+1–ое место, то же равен x. Если заполнено k-ое место, то сочетание сформировано и выводим его, иначе заполняем следующее i+1-ое место по алгоритму 2.7.

Алгоритм 2.7 порождения сочетаний с повторениями из n элементов по k.

Вход: i – заполняемое место в сочетании F;

b – минимальный элемент, который можно поставить на i-ое место.

Выход: последовательность всех сочетаний с повторениями из n элементов по k в неубывающем лексикографическом порядке.

Глобальные параметры: F – формируемое сочетание;

n – мощность множества;

k – количество элементов в сочетании.

Fi := x

+

Сочетание (i+1, x)

Рис.2.15. Рекурсивный алгоритм порождения сочетаний с повторениями

из n элементов по k

Пусть задано множество {1,2,3} и требуется получить все сочетания с повторениями из элементов этого множества по 3. Схема получения всех сочетаний по алгоритму 2.7 представлена на рис.2.16. В этой схеме представлены формируемые сочетания и множества, элементы которых можно поставить на очередное место в сочетании. В исходной ситуации все места сочетания неопределенны и на первое место можно поставить любой элемент множества {1,2,3}. В схеме к стрелкам приписаны номера действий. В результате выполнения первого действия на первое место сочетания ставится элемент 1 и на второе место после этого можно поставить любой элемент того же множества {1,2,3}. После выполнения

сочетание

3 {1,1,1)

множество

{1,2,3} 4 сочетание

сочетание {1,1,2)

{1,1,?} 5

2 сочетание

{1,1,3)

множество множество 7 сочетание

{1,2,3} 6 {2,3} {1,2,2)

сочетание сочетание 8

{1,?,?} {1,2,?} сочетание

9 {1,2,3)

1 множество

{3} 10 сочетание

сочетание {1,4,5)

множество {1,3,?}

{1,2,3}

с очетание 11 множество 13 сочетание

{?,?,?} 12 {2,3} {2,2,2)

множество сочетание 14

{2,3} {2,2,?} сочетание

сочетание 15 {2,2,3)

17 {2,?,?} множество

{3} 16 сочетание

сочетание {2,3,3)

{2,3,?}

множество множество

{3} 18 {3} 19 сочетание

сочетание сочетание {3,3,3)

{3,?,?} {3,3,?}

Рис.2.16. Схема получения всех сочетаний с повторениями

по алгоритму 2.7

действия 2 на второе место сочетания устанавливается элемент 1 и на третье место после этого опять можно поставить любой элемент множества {1,2,3}. После выполнения действия 3 первое сочетание {1,1,1} сформировано. Затем выполняется шаг назад и действие 4, ставящее элемент 2 из множества {1,2,3} на третье место и второе сочетание {1,1,2} сформировано и т.д. После выполнения шестого действия на второе место устанавливается элемент 2 и, после этого, на третье место можно поставить элемент из множества {2,3}, и следующее сочетание, после выполнения седьмого действия, будет {1,2,2}. Аналогичным образом формируются все остальные сочетания.