
- •Раздел 1. Множества.
- •1.1. Множества и подмножества.
- •1.2. Способы задания множеств.
- •1.3. Операции над множествами.
- •1.4. Свойства операций над множествами
- •1.5. Разбиение и покрытия
- •1.6. Булеан
- •1.7. Генерация всех подмножеств заданного универсума
- •1.8. Алгоритм построения бинарного кода Грея
- •1.9. Алгоритмы пересечения, объединения двух множеств и проверки включения слиянием
1.4. Свойства операций над множествами
Пусть задан универсум U. Тогда для любых множеств A, B, C U выполняются следующие свойства:
идемпотентность: А А = А, А А = А
коммутативность: А В = В А, А В = В А
ассоциативность: А (B C) = (A B) C, А (B C) = (A B) C
дистрибутивность:
А (B C) = (А В) (А С), А (B C) = (А В) (А С)
поглощение: (А В) А = А, (А В) А = А
свойства нуля: А = А, А =
свойства единицы: А U = U, А U = А
инволютивность:
(двойное отрицание)
законы де Моргана:
,
свойства дополнения:
,
выражение для разности:
В справедливости перечисленных свойств можно убедиться различными способами. Например, нарисовать диаграммы Эйлера для левой и правой частей равенства и убедиться, что они совпадают, или же провести формальное рассуждение для каждого равенства.
1.5. Разбиение и покрытия
Пусть =
- некоторое семейство подмножества М,
.
Семейство называется
покрытием множества М, если каждый
элемент М принадлежит хотя бы одному
множеству из
:
Семейство называется дизъюнктным, если элементы этого семейства попарно не пересекаются, то есть каждый элемент множества М принадлежит не более чем одному множеству из множеств :
Такое дизъюнктное покрытие называется разбиением множества М.
1.6. Булеан
Множество всех подмножеств множества
М называется булеаном и обозначается
:
Теорема: для конечного множества М,
1.7. Генерация всех подмножеств заданного универсума
Во многих переборных алгоритмах требуется
последовательно рассмотреть все
подмножества заданного множества. Мы
знаем, что множество всех подмножеств
(Булеан) имеет мощность
.
В данном случае |M|=3,
=8.
Т.е. необходимо сгенерировать 8 различных
подмножеств множества М.
Предлагается пронумеровать элементы
множества М. Например, M:=
{a,b,c},
предлагается произвести замены: a
= m1, b = m2,
c = m3. Теперь
M := {m1. m2,
m3}. В большинстве современных
компьютеров целые числа представляются
кодами в двоичной системе счисления(
).
Представим, что элемент(1 – входит, 0 –
не входит), стоящий на i-ой
позиции в двоичном представлении числа,
отвечает за вхождение i-ого
элемента исходного множества в
генерируемое подмножество. То по
двоичному представлению числа 5 будет
сгенерировано множество А := {m1,m3},
при этом
.
Исходя из вышеописанного метода следует
вывод, что для построения всех подмножеств
множества M, необходимо
сгенерировать подмножества для двоичных
представлений чисел
.
Чаще всего данный алгоритм реализуется
в ЭВМ следующим образом: в цикле по i
от 0 до
,
находится двоичное представление числа
I, с помощью которого
генерируется одно из подмножеств
множества М.
Недостаток этого алгоритма состоит в том, что порядок генерации подмножеств никак не связан с их составом. Например вслед за подмножеством с кодом 011 следует подмножество с кодом 100. Но в некоторых задачах для ускорения вычислений требуется, чтобы код следующего подмножество отличался в одном разряде от кода предыдущего. В таких случаях применяется алгоритм построения бинарного кода Грея.