- •Г.С. Розаренов, в.А. Шаруда дискретная математика Учебное пособие
- •Воронеж 2008
- •Воронеж 2008
- •Введение
- •1. Множества
- •1.1. Основные понятия
- •Упражнения
- •1.2. Операции над множествами
- •Упражнения
- •1.3. Диаграммы Венна
- •Упражнения
- •1.4. Доказательства
- •Упражнения
- •1.5. Векторы, прямые произведения, проекции векторов
- •Упражнения.
- •2. Алгебра логики
- •2.1. Функции алгебры логики
- •2.2. Формулы. Реализация функций формулами
- •2.3. Эквивалентность формул. Свойства элементарных функций. Принцип двойственности
- •2.4. Разложение булевых функций по переменным. Совершенная дизъюнктивная нормальная форма
- •2.5. Полнота и замкнутость
- •2.6. Проблема минимизации булевых функций
- •Упражнения.
- •2.7. Упрощение д.Н.Ф. Тупиковые (относительно упрощения) д.Н.Ф.
- •Упражнения.
- •3. Язык логики предикатов
- •3.1. Основные понятия логики предикатов
- •3.2. Истинные формулы и эквивалентные соотношения
- •Упражнения.
- •4. Теория графов
- •4.1.Основные понятия
- •Г раф изоморфен
- •4.2. Способы задания графов
- •Матрица инцидентности (ij)
- •4.3. Операции над частями графа
- •4.4. Маршруты, пути, цепи, циклы
- •4.5. Дерево и лес
- •4.6. Сети
- •Упражнения.
- •5. Введение в теорию алгоритмов
- •5.1. Предварительные обсуждения
- •5.2. Блок-схемы алгоритмов
- •5.3. Машины Тьюринга
- •5.4. Некоторые операции над машинами Тьюринга
- •5.5. Рекурсивные функции
- •6. Автоматы
- •6.1. Определение основных понятий
- •6.2. Изоморфизм и эквивалентность автоматов
- •6.3. Сети из автоматов
- •6.4. Синхронные сети
- •6.5. Программная реализация логических функций
- •Заключение
- •394026 Воронеж, Московский просп., 14
Упражнения.
Рис.12
1. Задать графы G1 и G2 матрицами инцидентности и смежности, а также списком ребер.
2. Определить дополнения G графа G, если
а) G – пятиугольник,
б) G – треугольник.
Какой ориентированный граф канонически соответствует графу G (представить графически).
3. Пусть графы G1 – тетраэдр; G2 – тетраэдр с петлями во всех вершинах; G3 – куб.
Задать эти графы различными способами. Проверить справедливость правил переходов от одного способа задания к другому.
4. Пусть граф G содержит V = {v1; v2; v3; v4;v5}, E = {(v1 v2), (v1, v5), ( v2, v3), ( v2, v4), ( v3, v5)},
= 5, = 5. Задать граф G графически, а соответствующее отношение – матрицей смежности. Каковы свойства данного отношения.
5. Какими свойствами характеризуются отношения, достижимости вершин в ориентированных графах G1 – G3 на рис. 13
Рис. 13
5. Введение в теорию алгоритмов
5.1. Предварительные обсуждения
С алгоритмами, т.е. эффективными процедурами, однозначно приводящими к результату, мы уже сталкивались. Школьные методы умножения столбиком, деления углом, правило дифференцирования сложной функции и т.д. – все это алгоритмы.
Каковы должны быть требования к алгоритму?
1. Любой алгоритм имеет дело с исходными данными и выдает результат. В технических терминах это означает, что алгоритм имеет входы и выходы. Кроме того, в ходе работы алгоритма получаются и промежуточные результаты, используемые в дальнейшем. Таким образом любой алгоритм имеет дело с данными – входными, выходными и промежуточные результаты. Какие объекты можно считать данными?
Ясно, что объекты должны быть четко определены и отличны друг от друга, а также от ‘‘не объектов”. К таким алгоритмическим объектам относятся числа, векторы, матрицы смежности графов, формулы и т.д. Такие объекты, как ‘‘рисунок”, ‘‘хорошая книга”, ‘‘осмысленное утверждение”, с которыми работает человек, алгоритм воспринимать не будет.
В теории алгоритмов фиксируют конкретные конечные наборы исходных объектов, называемых элементарными (цифры, буквы и т.д.), которые образуют алфавит. Из алфавита строятся другие объекты. Типичным средством построения являются индуктивные определения, указывающие как строить новые объекты из уже построенных.
Простейшее индуктивное определение – это определение некоторого множества слов, классическим примером которого служит определение идентификатора:
Идентификатор – это либо буква, либо идентификатор к которому приписана справа буква или цифра. Слова конечной длины в конечных алфавитах (в частности, числа) – наиболее обычный тип алгоритмических данных, а число символов в слове (длина слова) – естественная единица измерения объема обрабатываемой информации. Более сложный случай алгоритмических объектов – формулы. Они определяются индуктивно и так же являются словами в конечном алфавите, однако не каждое слово является формулой. В этом случае обычно основным алгоритмам предшествуют вспомогательные, которые проверяют, соответствуют ли исходные данные нужным требованиям. Такая проверка называется синтаксическим анализом.
2. Данные для своего размещения требуют памяти. Память обычно считается однородной и дискретной, т.е. состоит из одинаковых ячеек. Причем каждая ячейка может содержать один символ алфавита данных. Таким образом, единицы измерения объема данных и памяти согласованны.
3. Алгоритм состоит из отдельных элементарных шагов, или действий, причем множество различных шагов, из которых составлен алгоритм, конечно.
4. Последовательность шагов алгоритма детерминирована, т.е. после любого шага указывается, какой шаг делать дальше, либо дается команда остановки, после чего работа алгоритма считается законченной.
5. Естественно от алгоритма потребовать результативности, т.е. остановки после конечного числа шагов (зависящего от данных) с указанием того, что считать результатом. В этом случае говорят, что алгоритм сходится. Задача проверки результативности алгоритма решается гораздо труднее, чем проверка требований, изложенная в п.п. 1-4. Общего метода такой проверки вообще не существует.
6. Следует различать
а) описание алгоритма (инструкцию или программу);
б) механизм реализации алгоритма (напр. ЭВМ), включающий средства пуска, остановки, реализации элементарных шагов, выдачи результатов и обеспечения детерминированности, т.е. управление ходом вычисления;
в) процесс реализации алгоритма, т.е. последовательность шагов, которая будет порождена при применении алгоритма к конкретным данным.
Будем предполагать, что описание алгоритма и механизм его реализации конечные. Требование конечности процесса реализации совпадает с требованием результативности.
Пример 1: Рассмотрим следующую задачу: дана последовательность Р из n положительных чисел (n - конечное, но произвольное число). Требуется упорядочить их, т.е. построить последовательность R, в которой эти же числа расположенны в порядке возрастания.
Сразу приходит в голову простой способ ее решения: просматриваем Р и находим в ней наименьшее число; вычеркиваем его из Р и записываем его в качестве первого числа R; снова обращаемся к Р находим в ней наименьшее число и приписываем его справа к R и т.д., пока в Р не будут вычеркнуты все числа.
Возникает естественный вопрос “что значит и т.д.?”.
Для большей ясности перепишем описание способа решения в более четкой форме, разбив его на шаги и указав переходы между шагами.
Шаг 1. Ищем в Р наименьшее число.
Шаг 2. Найденное число приписываем справа к R (в начальный момент R пуста) и вычеркиваем его из Р.
Шаг 3. Если в Р нет чисел, то переходим к шагу 4.
В противном случае к шагу 1.
Шаг 4. Конец. Результатом считать последовательность R, построенную к данному моменту.
Большинство сочтут такое описание достаточно ясным, чтобы, пользуясь им, получить нужный результат. Однако это впечатление ясности опирается на некоторые неявные предположения, к которым мы привыкли, но которые нетрудно нарушить.
Например, что значит ‘‘дана последовательность чисел”? Является ли таковой ?
Очевидно, да, однако, в нашем описании ничего не сказано о том, как найти наименьшее среди этих чисел. В нем вообще ничего не говорится о том, как искать наименьшие числа. По-видимому, предполагается, что речь идет о десятичных дробях, и известно, как их сравнивать.
Итак, необходимо уточнить формы представления данных. При этом нельзя просто заявлять, что допустимо любое представление чисел. Ведь для каждого представления имеется свой алфавит(который помимо цифр может включать запятые, скобки, знаки операций и функций и т.д.) и свой способ сравнения чисел (например способ перевода чисел в десятичную дробь), тогда как конечность алфавита требует фиксировать его заранее, а конечность алгоритма позволяет включать в него лишь заранее фиксированное число способов сравнения.
Фиксация представления чисел в виде десятичных дробей также не решает всех проблем. Сравнение многоразрядных чисел уже не может считаться элементарным действием.
Например, какое из чисел 435783086,3499234 и 9582058343,1248927 больше?
В машинных алгоритмах само представление числа еще требует дальнейшего уточнения: нужно, во-первых, ограничить число разрядов в числе, т.к. от этого зависит, сколько ячеек памяти будет занимать число, во-вторых договорится о способе размещения десятичной запятой, т.е. выбрать представление в виде фиксированной или плавающей запятой, поскольку способы обработки этих представлений различны. Опять же, куда записывать Р и R?
Таким образом, даже в этом простом примере несложный анализ показывает, что описание, которое выглядит вполне ясно, еще далеко до алгоритма. Мы столкнулись здесь с необходимостью уточнить почти все основные характеристики алгоритма, которые отмечались ранее: алфавит данных и форму их представления, память и размещение в ней элементов Р и R, элементарные шаги (поскольку шаг 1 явно неэлементарен). Кроме того, становится ясным,что выбор механизма реализации (скажем человек или ЭВМ) будет влиять на сам характер уточнения: у человека требования к памяти, представлению данных и к элементарности шагов гораздо более слабые и ‘‘укрупненные”, отдельные незначительные детали он может уточнить сам.
Только два требования к алгоритмам в приведенном описании выполнены в достаточной мере (они и создают впечатление ясности). Очевидна сходимость алгоритма: после выполнения шагов 1 и 2 либо работа заканчивается, либо из Р вычеркивается одно число, из этого следует, что после n выполнения шагов 1 и 2 из P будут вычеркнуты все числа и алгоритм остановится. Не вызывает сомнений и детерминированность: после каждого шага ясно что делать дальше.