
- •Оглавление
- •1. Множества
- •1.1. Основные понятия
- •1.2. Способы задания множеств
- •1.3. Операции над множествами
- •Приоритеты операций над множествами
- •1.4. Свойства операций над множествами
- •1.5. Методы доказательства теоретико-множественных тождеств
- •1.5.1. Метод двух включений
- •1.5.2. Метод эквивалентных преобразований
- •1.5.3. Метод характеристических функций
- •1.5.4. Метод логических функций
- •1.5.5. Теоретико-множественный метод
- •1.6. Способы представления множества в памяти эвм
- •1.7. Алгоритмы реализации операций над множествами
- •Практическое занятие 1.1 Операции над множествами
- •Задания
- •Варианты заданий
- •Практическое занятие 1.2 Теоретико-множественные тождества
- •Задания
- •Варианты заданий
- •Контрольные вопросы
- •2. Комбинаторные объекты
- •2.1. Введение
- •2.2. Метод поиска с возвращением
- •2.3. Подмножества
- •2.4. Перестановки
- •2.5. Размещения
- •2.6. Размещения с повторениями
- •2.7. Сочетания
- •2.8. Перестановки с повторениями
- •2.9. Сочетания с повторениями
- •2.10. Упорядоченные разбиения множества
- •2.11. Разбиения множества
- •2.12. Использование алгоритмов порождения комбинаторных объектов при проектировании полнопереборных алгоритмов решения задач выбора
- •2.13. О неэффективности полнопереборных алгоритмов. Пример
- •Времена обработки деталей на станках a и b
- •Времена окончания обработки деталей на станках a и b
- •Времена окончания обработки деталей на станках a и b
- •Времена окончания обработки деталей на станках a и b
- •Практическое занятие 2.1 Алгоритмы порождения комбинаторных объектов
- •Задания
- •Практическое занятие 2.2 Разбиения множеств
- •Задания
- •Количество упорядоченных разбиений
- •Практическое занятие 2.3
- •Задачи выбора
- •Цель занятия: приобретение практических навыков в использовании алгоритмов порождения комбинаторных объектов при проектировании алгоритмов решения задач выбора.
- •Задания
- •Варианты заданий
- •Контрольные вопросы
- •Библиографический список
1.6. Способы представления множества в памяти эвм
Для представления конечного множества в памяти ЭВМ можно использовать различные способы.
1. Элементы множества А хранятся в переменной А типа массив, мощность множества А – в переменной KA. Количество элементов в массиве А равно мощности универсума. Элементы массива А неупорядочены.
2. Элементы множества А хранятся в переменной А типа массив, мощность множества А – в переменной KA. Количество элементов в массиве А равно мощности универсума. Элементы массива А упорядочены по возрастанию.
3. Элементы универсума нумеруются: U={u1,…,un}. Элементы множества А хранятся в переменной А типа массив, элементы которого типа boolean. Если uiA, то Аi=true, иначе Ai=false. Количество элементов в массиве А равно мощности универсума.
4. Элементы универсума нумеруются: U={u1,…,un}. Множество А представляется кодом С в котором: Ci=1, если uiA и Ci=0, если uiA, где Сi – i-й разряд кода С. В зависимости от мощности универсума код С может храниться в простой переменной или в массиве.
5. Для хранения множества можно использовать множественный тип.
1.7. Алгоритмы реализации операций над множествами
Алгоритмы реализации операций над множествами зависят от способа представления множества в памяти ЭВМ. Будем считать, что универсум U представляет собой KU натуральных чисел:
U={x | xN и xKU}.
Если это не так, то элементы множества U можно пронумеровать и определить однозначное соответствие между элементами множества U и их номерами.
1. Элементы множества А хранятся в переменной А типа массив, мощность множества А – в переменной KA. Количество элементов в массиве А равно мощности универсума. Элементы массива А неупорядочены.
Алгоритм 1.1 (рис.1.3) вычисления включения А в В (АВ).
Вход: А-массив, хранящий элементы множества А, КА=|A|;
B-массив, хранящий элементы множества B, КB=|B|;
Выход: F=true, если АВ, иначе F=false.
Рис.1.3. Блок-схема алгоритма вычисления включения А в В
Алгоритм 1.2 (рис.1.4) вычисления равенства А и В (А=В).
Вход: А-массив, хранящий элементы множества А, КА=|A|;
B-массив, хранящий элементы множества B, КB=|B|;
Выход: F=true, если А=В, иначе F=false.
Рис.1.4. Блок-схема алгоритма вычисления равенства А и В
Алгоритм 1.3 (рис.1.5) вычисления объединения А и В (АВ).
Вход: А-массив, хранящий элементы множества А, КА=|A|;
B-массив, хранящий элементы множества B, КB=|B|;
Выход: С-массив, хранящий объединение множеств А и B, КС=|С|;
+
Рис.1.5. Блок-схема алгоритма вычисления объединения А и В
Алгоритм 1.4 (рис.1.6) вычисления пересечения А и В (АВ).
Вход: А-массив, хранящий элементы множества А, КА=|A|;
B-массив, хранящий элементы множества B, КB=|B|;
пусть КА KB;
Выход: С-массив, хранящий пересечение множеств А и B, КС=|С|;
Рис.1.6. Блок-схема алгоритма вычисления пересечения А и В
Алгоритм 1.5 (рис.1.7) вычисления разности А и В (А-В).
Вход: А-массив, хранящий элементы множества А, КА=|A|;
B-массив, хранящий элементы множества B, КB=|B|;
Выход: С-массив, хранящий разность множеств А и B, КС=|С|;
+
Рис.1.7. Блок-схема алгоритма вычисления разности А и В
Алгоритм 1.6 вычисления симметрической разности А и В (АВ).
Вход: А-массив, хранящий элементы множества А, КА=|A|;
B-массив, хранящий элементы множества B, КB=|B|;
Выход: С-массив, хранящий симметрическую разность
множеств А и B, КС=|С|;
1. C:=A-BB-A; {или C:=(AB)-(AB) }
2. Конец.
Алгоритм 1.7
(рис.1.8) вычисления дополнения А (
).
Вход: А-массив, хранящий элементы множества А, КА=|A|;
Выход: С-массив, хранящий дополнение множества А, КС=|С|;
Рис.1.8. Блок-схема алгоритма вычисления дополнения А
2. Элементы множества А хранятся в переменной А типа массив, мощность множества А – в переменной KA. Количество элементов в массиве А равно мощности универсума. Элементы массива А упорядочены по возрастанию.
Алгоритм 1.8 (рис.1.9) вычисления равенства А и В (А=В).
Вход: А-массив, хранящий элементы множества А, КА=|A|;
B-массив, хранящий элементы множества B, КB=|B|;
Выход: F=true, если А=В, иначе F=false.
Рис.1.9. Блок-схема алгоритма вычисления равенства А и В
Алгоритм 1.9 (рис.1.10) вычисления включения А в В (АВ).
Вход: А-массив, хранящий элементы множества А, КА=|A|;
B-массив, хранящий элементы множества B, КB=|B|;
Выход: F=true, если АВ, иначе F=false.
+
+
Рис.1.10. Блок-схема алгоритма вычисления включения А в В
Алгоритм 1.10 (рис.1.11) вычисления объединения А и В (АВ).
Вход: А-массив, хранящий элементы множества А, КА=|A|;
B-массив, хранящий элементы множества B, КB=|B|;
Выход: С-массив, хранящий объединение множеств А и B, КС=|С|
+
+
Рис.1.11. Блок-схема алгоритма вычисления объединения А и В
Алгоритм 1.11 (рис.1.12) вычисления пересечения А и В (АВ).
Вход: А-массив, хранящий элементы множества А, КА=|A|;
B-массив, хранящий элементы множества B, КB=|B|;
Выход: С-массив, хранящий пересечение множеств А и B, КС=|С|;
+
+
Рис.1.12. Блок-схема алгоритма вычисления пересечения А и В
Алгоритм 1.12 (рис.1.13) вычисления разности А и В (А-В).
Вход: А-массив, хранящий элементы множества А, КА=|A|;
B-массив, хранящий элементы множества B, КB=|B|;
Выход: С-массив, хранящий разность множеств А и B, КС=|С|;
+
+
KC:=KC+1;
CKC:=Ai;
i:=i+1
Рис.1.13. Блок-схема алгоритма вычисления разности А и В
Алгоритм 1.13 (рис.1.14) вычисления симметрической разности
А и В (АВ).
Вход: А-массив, хранящий элементы множества А, КА=|A|;
B-массив, хранящий элементы множества B, КB=|B|;
Выход: С-массив, хранящий симметрическую разность АВ, КС=|С|;
+
+
Рис.1.14. Блок-схема алгоритма вычисления симметрической разности А и В
Алгоритм 1.14 (рис.1.15) вычисления дополнения А ( ).
Вход: А-массив, хранящий элементы множества А, КА=|A|;
Выход: С-массив, хранящий дополнение множества А, КС=|С|;
+
+
KC:=KC+1;
CKC:=u;
u:=u+1
Рис.1.15. Блок-схема алгоритма вычисления дополнения А
3. Элементы универсума нумеруются: U={u1,…,un}. Элементы множества А хранятся в переменной А типа массив, элементы которого типа boolean. Если uiA, то Аi=true, иначе Ai=false. Количество элементов в массиве А равно мощности универсума.
Алгоритм 1.15 (рис.1.16) вычисления равенства А и В (А=В).
Вход: А-массив, хранящий элементы множества А;
B-массив, хранящий элементы множества B;
Выход: F=true, если А=В, иначе F=false.
Рис.1.16. Блок-схема алгоритма вычисления равенства А и В
Алгоритм 1.16 (рис.1.17) вычисления включения А в В (АВ).
Вход: А-массив, хранящий элементы множества А;
B-массив, хранящий элементы множества B;
Выход: F=true, если АВ, иначе F=false.
АВ
F
:= Ai
Bi;
i:=i+1
Рис.1.17. Блок-схема алгоритма вычисления равенства А и В
Алгоритм 1.17 (рис.1.18) вычисления объединения А и В (АВ).
Вход: А-массив, хранящий элементы множества А;
B-массив, хранящий элементы множества B;
Выход: С-массив, хранящий объединение множеств А и B;
Ci
:=
Ai
or Bi
Рис.1.18. Блок-схема алгоритма вычисления объединения А и В
Алгоритм 1.18 (рис.1.19) вычисления пересечения А и В (АВ).
Вход: А-массив, хранящий элементы множества А;
B-массив, хранящий элементы множества B;
Выход: С-массив, хранящий пересечение множеств А и B;
Ci
:=
Ai
and Bi
Рис.1.19. Блок-схема алгоритма вычисления пересечения А и В
Алгоритм 1.19 (рис.1.20) вычисления разности А и В (А-В).
Вход: А-массив, хранящий элементы множества А;
B-массив, хранящий элементы множества B;
Выход: С-массив, хранящий разность множеств А и B;
Ci:=
Ai
> Bi
Рис.1.20. Блок-схема алгоритма вычисления разности А и В
Алгоритм 1.20 (рис1.21) вычисления симметрической разности А и В (АВ).
Вход: А-массив, хранящий элементы множества А;
B-массив, хранящий элементы множества B;
Выход: С-массив, хранящий симметрическую разность
множеств А и B;
Ci
:=
Ai
Bi
Рис.1.21. Блок-схема алгоритма вычисления симметрической
разности А и В
Алгоритм 1.21 (рис.1.22) вычисления дополнения А ( ).
Вход: А-массив, хранящий элементы множества А;
Выход: С-массив, хранящий дополнение множества А
Ci
:=
not Ai
Рис.1.22. Блок-схема алгоритма вычисления дополнения А
4. Элементы универсума нумеруются: U={u1,…,un}. Множество А представляется кодом С в котором: Ci=1, если uiA и Ci=0, если uiA, где Сi – i-й разряд кода С. В зависимости от мощности универсума код С может храниться в простой переменной или в массиве.
Алгоритмы реализации операций при таком способе представления множества в памяти ЭВМ можно получить путём замены логических операций на побитовые в предшествующих алгоритмах и корректировкой конечного значения параметра циклов.
5. Для хранения множества можно использовать множественный тип, если он имеется в языке программирования, и выполнять предусмотренные типом операции над множествами.