- •Раздел 1. Алгебраические структуры Тема 1.1. Бинарные операции и их свойства
- •Тема 1.2. Алгебраические структуры
- •Тема 1.3. Основные свойства групп
- •Тема 1.4. Поля и кольца
- •Раздел 2. Алгебра множеств Тема 2.1. Основные определения теории множеств
- •Тема 2.2. Подмножество, понятие универсального множества
- •Тема 2.3. Операции над множествами
- •Раздел 3. Основные теоремы комбинаторики
- •Тема 3.1. Метод математической индукции
- •Тема 3.2. Основные принципы комбинаторики
- •Раздел 4. Комбинаторные объекты Тема 4.1. Сочетания
- •Тема 4.2. Размещения и перестановки
- •Раздел 5. Полиномиальные тождества Тема 5.1. Бином Ньютона
- •Тема 5.2. Понятие о методе рекуррентных соотношений
- •Тема 5.3. Метод производящих функций
- •Тема 5.4. Метод траекторий
- •Тема 5.5. Примеры комбинаторных задач
- •Раздел 6. Соответствие, отношение, отображение Тема 6.1. Понятие кортежа. Декартово произведение множеств
- •Тема 6.2. Определения и свойства
- •Тема 6.3. Типы отношений
- •Пересечение и объединение отношений
- •Композиция отображений и отношений
- •Тема 6.5. Решётки
- •Тема 6.4. Верхняя и нижняя границы множества.
- •Раздел 7. Операции булевой алгебры Тема 7.1.Понятие высказывания, простые и составные высказывания
- •Тема 7.2.Операции на множестве высказываний
- •Отрицание
- •Конъюнкция
- •Дизъюнкция
- •«Исключающее или»
- •Импликация
- •Эквивалентность
- •Штрих Шеффера
- •Раздел 8. Законы и тождества Булевой алгебры Тема 8.1.Формулы Булевой алгебры
- •Тема 8.2.Законы и тождества Булевой алгебры
- •Тема 8.3.Составление формулы по заданной таблице истинности
- •Тема 8.4. Двойственность
- •Тема 8.5.Булева алгебра и теория множеств
- •Тема 8.6.Днф, интервалы и покрытия
- •Раздел 9. Функциональная полнота. Алгебра Жегалкина
- •Тема 9.1.Функционально полные системы
- •Тема 9.2.Алгебра Жегалкина и линейные функции
- •Тема 9.3.Замкнутые классы. Монотонные функции
- •Тема 9.4.Теоремы о функциональной полноте
- •Раздел 10. Хорновские формулы
- •Тема 10.1.Задача получения продукции
- •Тема 10.2.Решение задачи о продукции
- •Алгоритм замыкание(X,f)
- •Алгоритм ПрямаяВолна(X,y,f)
- •Алгоритм БыстроеЗамыкание(X,f)
- •Раздел 11. Теория релейно-контактных схем Тема 11.1.Основные понятия
- •Тема 11.2.Основные задачи теории релейно-контактных схем
- •Тема 11.3.Построение машины голосования
- •Тема 11.4.Двоичный сумматор
- •Тема 11.5.Методы упрощения логических выражений. Методы решения логических задач
- •Раздел 12. Логика предикатов Тема 12.1.Определение предиката
- •Тема 12.2.Логические операции над предикатами
- •Тема 12.3.Кванторы
- •Тема 12.4. Истинные формулы и эквивалентные соотношения
- •Тема 12.5.Доказательства в логике предикатов
- •Раздел 13. Теория графов
- •Тема 13.1.Основные определения теории графов
- •Тема 13.2. Способы задания графов
- •Тема 13.3. Отношения порядка и эквивалентности на графе
- •Тема 13.4. Числовые характеристики графа
- •Тема 13.5.Изоморфизм графов
- •Раздел 14. Проблемы достижимости на графах Тема 14.1.Граф достижимости
- •Тема 14.2.Взаимная достижимость, компоненты сильной связности и базы графа
- •Раздел 15. Некоторые классы графов Тема 15.1.Деревья
- •Тема 15.2. Обход графа
- •Тема 15.3. Расстояния. Диаметр, радиус и центр графа. Протяжённости.
- •Раздел 16. Машина Тьюринга
- •Тема 16.1. Формальное описание машины Тьюринга
- •Тема 16.2. Примеры построения машины Тьюринга
- •Тема 16.3. Свойства машины Тьюринга как алгоритма
- •Раздел 17. Машина Поста
- •Тема 17.1. Теоретическая часть. Состав машины Поста
- •Тема 17.2. Применимость программ. Определение результата выполнения программ
- •Раздел 18. Основные понятия теории автоматов Тема 18.1. Общие подходы к описанию устройств, предназначенных для обработки дискретной информации
- •Тема 18.2. Способы задания конечного автомата
- •Тема 18.3. Эквивалентные автоматы
- •Тема 18.4. Автоматы Мура и Мили
- •Тема 18.5. Примеры синтеза автоматов
Тема 10.2.Решение задачи о продукции
Можно ли построить эффективную процедуру, проверяющую разрешимость задачи о продукции или (что то же самое) задачи о следствии для -формул? Процедура, описанная во второй части доказательства теоремы, является основой для следующего алгоритма, который строит множество всех продуктов, которые можно получить из исходных продуктов с помощью заданной системы технологических процессов.
Определение:Пусть– множество технологических процессов,– исходное множество продуктов.Замыканиес помощью– это множество продуктов
Приводимый ниже алгоритм ПрямаяВолна решает задачу о продукции в два этапа: на первом строится замыкание , а на втором – проверяется, входит лив это замыкание. Итак, основную роль играет алгоритм построения замыкания ЗАМЫКАНИЕ (X,F). В нём переменные СТАРЫЕ и НОВЫЕ – это множества продуктов (истинных булевых переменных). Идея построения замыкания проста: вначале исходные данные из X заносятся в НОВЫЕ. Затем работа идёт поэтапно. Перед началом каждого этапа полученные ранее НОВЫЕ передаются в СТАРЫЕ. После этого результаты всех технологических процессов, входы которых уже получены, т.е. содержатся в множестве НОВЫЕ, добавляются к этому множеству. Алгоритм завершает работу, когда на очередном этапе ничего не добавилось, т.е. нет технологических процессов, применение которых может расширить множество полученных продуктов.
Алгоритмы такого вида часто называются алгоритмами прямого поиска или поиска от данных.
Алгоритм замыкание(X,f)
Вход: множество технологических процессов F и множество исходных продуктов X.
Выход: множество продуктов НОВЫЕ (=Cl(X,F)).
СТАРЫЕ := ; НОВЫЕ := X;
while НОВЫЕ <> СТАРЫЕ do
СТАРЫЕ := НОВЫЕ;
ДЛЯ КАЖДОГО процесса t F ВЫПОЛНЯТЬ
if {Lt} НОВЫЕ ТО НОВЫЕ := НОВЫЕ{bt};
вернуть (НОВЫЕ).
Алгоритм ПрямаяВолна(X,y,f)
Z := ЗАМЫКАНИЕ (X,F);
if y Z\ then вернуть («ДА») else вернуть («НЕТ»).
Следующая теорема утверждает корректность приведённого алгоритма.
Теорема.Алгоритм ЗАМЫКАНИЕ(X,F) возвращает множество Cl(X,F), а алгоритм ПрямаяВолна(X,y,F) выдаёт ответ «ДА» тогда и только тогда, когда .
Пример 10.2:Рассмотрим работу алгоритма ЗАМЫКАНИЕ(X,F) на задаче полученияy = дачапо исходному множеству X = {дерево, клей, гвозди, стекло, кирпич, крыша} из примера 10.1.
В следующей таблице показаны шаги алгоритма, на которых изменяются значения переменных СТАРЫЕ и НОВЫЕ. В первом столбце этой таблицы указан номер соответствующей строки алгоритма, после строки 5 в скобках указан тот процесс, который приводит к увеличению множества НОВЫЕ.
Стр. |
СТАРЫЕ |
НОВЫЕ |
|
дерево, клей, гвозди, кирпич, крыша, стекло | |
|
дерево, клей, гвозди, кирпич, крыша, стекло |
дерево, клей, гвозди, кирпич, крыша, стекло |
|
- " - |
дерево, клей, гвозди, кирпич, крыша, стекло, столы |
- " - |
дерево, клей, гвозди, кирпич, крыша, стекло, столы, полы | |
- " - |
дерево, клей, гвозди, кирпич, крыша, стекло, столы, полы, окна | |
дерево, клей, гвозди, кирпич, крыша, стекло, столы, полы, окна |
дерево, клей, гвозди, кирпич, крыша, стекло, столы, полы, окна, стены | |
дерево, клей, гвозди, кирпич, крыша, стекло, столы, полы, окна, стены |
дерево, клей, гвозди, кирпич, крыша, стекло, столы, полы, окна , стены, дача |
Таким образом, в данном примере построение результирующего множества НОВЫЕ, равного Cl(X,F), завершается за два этапа, а на третьем выясняется, что ничего нового в него не может быть добавлено. После этого алгоритм ПрямаяВолна(X,y,F) проверит, что дача входит в Cl(X,F), и выдаст ответ «ДА».
С точки зрения сложности вычислений недостатком алгоритма ЗАМЫКАНИЕ(X,F) является то, что на каждой итерации основного цикла в строках 2-6 в строке 4 перебираются все процессы, даже уже отработавшие, а в строке 5 на вхождение в НОВЫЕ проверяются все элементы даже те, вхождение которых в НОВЫЕ уже было установлено на предыдущих итерациях. Ниже приведен более эффективный алгоритм для построения замыкания.
На этапе инициализации в нём для каждого процесса подсчитывается число элементов ви помещается в ячейку массива СЧЕТ [], кроме того, для каждогосоздаётся список СПИСОК [] (номеров) процессов, во входы (левые части) которых входит продукт. Далее в основной части алгоритма для каждого продуктаиз множества НОВЫЕ, куда вначале помещается, и каждого процесса, в условие которого входит, из СЧЕТ [] вычитается 1. Если СЧЕТ [] становится равным 0, это означает, что все продукты изуже получены и тогда его результатдобавляется в НОВЫЕ, если его там ранее не было. Для поиска такихиспользуется СПИСОК []. Во множестве ОБНОВА хранятся уже полученные продукты из НОВЫЕ, которые ещё не использовались для запуска новых процессов. Множества продуктов НОВЫЕ и ОБНОВА реализуются булевскими массивами длины, единицы которых объединены в списки.