Дискретка_Экзамен_Ответы / комб / 2 Подмножества
.docx2.3. Подмножества
Множество А называется подмножеством множества В, если истинно включение А в В (АВ = истина).
Теорема 2.1. Количество всех различных подмножеств n-элементно-го множества равно 2n.
Доказательство. Поставим в соответствие каждому подмножеству А множества В n-разрядный двоичный вектор, i-ый разряд которого равен единице только тогда, когда i-ый элемент множества В принадлежит подмножеству А. Для того, чтобы сформировать n-разрядный двоичный вектор, нужно выполнить одно за другим n действий: заполнить 1-ый разряд вектора, 2-ой разряд и так до n-го разряда. Каждое действие можно выполнить двумя способами (разряд двоичного вектора можно заполнить только нулём или единицей). По правилу произведения все n действий могут быть выполнены 22…2=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