Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Дискретка_Экзамен_Ответы / комб / 2 Подмножества

.docx
Скачиваний:
58
Добавлен:
11.03.2015
Размер:
17.79 Кб
Скачать

2.3. Подмножества

Множество А называется подмножеством множества В, если истинно включение А в В (АВ = истина).

Теорема 2.1. Количество всех различных подмножеств n-элементно-го множества равно 2n.

Доказательство. Поставим в соответствие каждому подмножеству А множества В n-разрядный двоичный вектор, i-ый разряд которого равен единице только тогда, когда i-ый элемент множества В принадлежит подмножеству А. Для того, чтобы сформировать n-разрядный двоичный вектор, нужно выполнить одно за другим n действий: заполнить 1-ый разряд вектора, 2-ой разряд и так до n-го разряда. Каждое действие можно выполнить двумя способами (разряд двоичного вектора можно заполнить только нулём или единицей). По правилу произведения все n действий могут быть выполнены 222=2n способами, т.е. может быть получено 2n различных n-разрядных двоичных векторов, следовательно, количество всех различных подмножеств n-элементного множества равно 2n.

Для получения (порождения) всех подмножеств заданного множества В достаточно сформировать все двоичные вектора, разрядность которых равна n=|B|. Можно сформировать все двоичные n-разрядные вектора, используя метод поиска с возвращением, выполняя действия, описанные в доказательстве теоремы 2.1. Формирование i-го разряда опишем рекурсивным алгоритмом 2.1, блок-схема которого представлена на рис.2.3. В цикле выполняем один из способов заполнения i-го разряда. Если заполнен последний разряд, то вектор сформирован и выводим его, иначе заполняем следующий разряд по алгоритму 2.1.

Алгоритм 2.1 порождения n-разрядных двоичных векторов.

Вход: i – формируемый разряд вектора D.

Выход: последовательность всех n-разрядных двоичных векторов.

Глобальные параметры: D – формируемый вектор;

n – разрядность вектора.

Двоичные вектора(i)

x:=0,1

Di := x

i=n

+

Конец

D

Двоичные вектора(i+1)

Рис.2.3. Рекурсивный алгоритм порождения n-разрядных

двоичных векторов

Пусть задано множество {1,2,3} и требуется получить все его подмножества. Схема получения всех двоичных трёхразрядных векторов по алгоритму 2.1 и соответствующих им подмножеств заданного множества представлена на рис.2.4. Самый правый (первый) разряд вектора соответствует элементу 1, средний (второй) – элементу 2, самый левый (третий) – элементу 3. В исходной ситуации все разряды двоичного вектора неопределенны. В схеме к стрелкам приписаны номера действий. После последовательного выполнения действий 1, 2 и 3 заполняются нулями третий, второй и первый разряды и вектор (0,0,0), соответствующий пустому подмножеству, сформирован. После выполнения действия 4 заполняется единицей первый разряд и вектор (0,0,1), соответствующий подмножеству {1}, сформирован. Затем выполняются два шага назад и действие 5, заполняющее единицей второй разряд вектора. Далее, после выполнения действия 6, заполняется нулём первый разряд и вектор (0,1,0), соответствующий подмножеству {2}, сформирован. Аналогичным образом формируются все остальные двоичные вектора. Действия 1 и 8 заполняют третий разряд вектора, действия 2, 5, 9, 12 – второй разряд, действия 3, 4, 6, 7, 10, 11, 13, 14 – третий разряд.

вектор

(0,0,0)

3 подмножество

вектор

(0,0,?) 4 вектор

2 (0,0,1)

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

вектор {1}

(0,?,?)

вектор

5 (0,1,0)

6 подмножество

1 {2}

вектор

(0,1,?) 7 вектор

(0,1,1)

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

{2,1}

вектор

(?,?,?)

вектор

(1,0,0)

8 10 подмножество

{3}

вектор

(1,0,?) 11 вектор

9 (1,0,1)

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

вектор {3 , 1}

(0,?,?)

12 вектор

(1,1,0)

13 подмножество

{3,2}

вектор

(1,1,?) 14 вектор

(1,1,1)

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

{3,2,1}

Рис.2.4. Схема порождения двоичных векторов по алгоритму 2.1