Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпора математика(готовая. все вопросы).docx
Скачиваний:
25
Добавлен:
24.09.2019
Размер:
638.06 Кб
Скачать

17.Графы. Классические задачи теории графов.Сетевые модели и их оптимизация. Поиск в глубину и в ширину.

Г раф состоит из двух типов элементов: вершин и дуг, соединяющих между собой эти вершины. При изображении графов чаще всего используется следующая система обозначений: каждой вершине сопоставляется точка на плоскости, и если между вершинами существует ребро, то соответствующие точки соединяются отрезком (стрелкой). Для графа представленого на рисунке 2: A, B, C, D, E - вершины; a, b, с, d, e, f, g - дуги графа.

В общем смысле граф представляется как мн-во вершин (узлов), соединённых рёбрами. В более строгом определении граф — это совокупность мн-ва Х, элементы которого называются вериашами, и мн-ва А упорядоченных пар вершин, элементы которого называются дугами. Граф обозначается как G(Х, А). Предполагается, что как мн-во Х, так и мн-во А содержат конечное число элементов.

Граф, в котором направления дуг не задаются, называется неориентированным. Неориентированные дуги называются ребрами.

Будем называть две вершины соседними, если есть дуга, их соединяющая.

Под обходом графов (поиском на графах) понимается процесс систематического просмотра всех ребер или вершин графа с целью отыскания ребер или вершин, удовлетворяющих некоторому условию.

При решении многих задач, использующих графы, необходимы эффективные методы регулярного обхода вершин и ребер графов. К стандартным и наиболее распространенным методам относятся:

- поиск в глубину (Depth First Search, DFS);

- поиск в ширину (Breadth First Search, BFS).

Эти методы чаще всего рассматриваются на ориентированных графах, но они применимы и для неориентированных, ребра которых считаются двунаправленными. Алгоритмы обхода в глубину и в ширину лежат в основе решения различных задач обработки графов, например, построения остовного леса, проверки связности, ацикличности, вычисления расстояний между вершинами и других.

Поиск в глубину

При поиске в глубину посещается первая вершина, затем необходимо идти вдоль ребер графа, до попадания в тупик. Вершина графа является тупиком, если все смежные с ней вершины уже посещены. После попадания в тупик нужно возвращаться назад вдоль пройденного пути, пока не будет обнаружена вершина, у которой есть еще не посещенная вершина, а затем необходимо двигаться в этом новом направлении. Процесс оказывается завершенным при возвращении в начальную вершину, причем все смежные с ней вершины уже должны быть посещены.

Таким образом, основная идея поиска в глубину – когда возможные пути по ребрам, выходящим из вершин, разветвляются, нужно сначала полностью исследовать одну ветку и только потом переходить к другим веткам (если они останутся нерассмотренными).

Алгоритм поиска в глубину

Шаг 1. Всем вершинам графа присваивается значение не посещенная. Выбирается первая вершина и помечается как посещенная.

Шаг 2. Для последней помеченной как посещенная вершины выбирается смежная вершина, являющаяся первой помеченной как не посещенная, и ей присваивается значение посещенная. Если таких вершин нет, то берется предыдущая помеченная вершина.

Шаг 3. Повторить шаг 2 до тех пор, пока все вершины не будут помечены как посещенные

Также часто используется нерекурсивный алгоритм поиска в глубину. В этом случае рекурсия заменяется на стек. Как только вершина просмотрена, она помещается в стек, а использованной она становится, когда больше нет новых вершин, смежных с ней.

Временная сложность зависит от представления графа. Если применена матрица смежности, то временная сложность равна O(n2), а если нематричное представление – O(n+m): рассматриваются все вершины и все ребра.

Поиск в ширину

при поиске в ширину, после посещения первой вершины, посещаются все соседние с ней вершины. Потом посещаются все вершины, находящиеся на расстоянии двух ребер от начальной. При каждом новом шаге посещаются вершины, расстояние от которых до начальной на единицу больше предыдущего. Чтобы предотвратить повторное посещение вершин, необходимо вести список посещенных вершин. Для хранения временных данных, необходимых для работы алгоритма, используется очередь – упорядоченная последовательность элементов, в которой новые элементы добавляются в конец, а старые удаляются из начала.

Таким образом, основная идея поиска в ширину заключается в том, что сначала исследуется все вершины, смежные с начальной вершиной (вершина с которой начинается обход). Эти вершины находятся на расстоянии 1 от начальной. Затем исследуется все вершины на расстоянии 2 от начальной, затем все на расстоянии 3 и т.д. Обратим внимание, что при этом для каждой вершины сразу находятся длина кратчайшего маршрута от начальной вершины.

Алгоритм поиска в ширину

Шаг 1. Всем вершинам графа присваивается значение не посещенная. Выбирается первая вершина и помечается как посещенная (и заносится в очередь).

Шаг 2. Посещается первая вершина из очереди (если она не помечена как посещенная). Все ее соседние вершины заносятся в очередь. После этого она удаляется из очереди.

Шаг 3. Повторяется шаг 2 до тех пор, пока очередь не пуста

Нахождение кратчайшего пути

Задача состоит в нахождении связанных между собой до­рог на транспортной сети, которые в совокупности имеют ми­нимальную длину от исходного пункта до пункта назначения.

Введем обозначения:

dij расстояние на сети между смежными узлами i и j;

Uj кратчайшее расстояние между узлами i и j, U1 = 0.

Формула для вычисленияUj:

Из формулы следует, что кратчайшее расстояние Uj до уз­ла j можно вычислить лишь после того, как определено крат­чайшее расстояние до каждого предыдущего узла i, соединен­ного дугой с узлом j. Процедура завершается, когда получено Ui последнего звена.

Определить кратчайшее расстояние между узлами 1 и 7 (рис. 30.22).

Решение. Найдем минимальные расстояния:

Минимальное расстояние между узлами 1 и 7 равно 13, а соответствующий маршрут: 1-2-5-7.

СЕТЕВЫЕ МОДЕЛИ

До появления сетевых методов планирование работ, проек­тов осуществлялось в небольшом объеме. Наиболее известным средством такого планирования был ленточный график Ганта, недостаток которого состоит в том, что он не позволяет установить завис-ти между различными операциями.

Современное сетевое планирование начинается с разбиения программы работ на операции. Определяются оценки продол­жительности операций, и строится сетевая модель (график). Построение сетевой модели позволяет проанализировать все операции и внести улучшения в структуру модели до начала ее реализации. Строится календарный график, определяющий начало и окончание каждой операции, а также взаимосвязи с другими операциями графика. Календарный график выявляет критические операции, которым надо уделять особое внима­ние, чтобы закончить все работы в директивный срок. Что касается некритических операций, то календарный план поз­воляет определить резервы времени, которые можно выгодно использовать при задержке выполнения работ или эффектив­ном применении как трудовых, так и финансовых ресурсов.

Основные понятия сетевой модели

Сетевая модель — графическое изображение плана выпол­нения комплекса работ, состоящего из нитей (работ) и узлов (событий), которые отражают логическую взаимосвязь всех операций. В основе сетевого моделирования лежит изображе­ние планируемого комплекса работ в виде графа. Граф — схе­ма, состоящая из заданных точек (вершин), соединенных сис­темой линий. Отрезки, соединяющие вершины, называются ребрами (дугами) графа. Ориентированным называется такой граф, на котором стрелкой указаны направления всех его ребер (дуг), что позволяет определить, какая из двух его граничных вершин является начальной, а какая — конечной. Исследование таких сетей проводится методами теории графов.

Теория графов оперирует понятием пути, объединяющим последовательность взаимосвязанных ребер. Контур означает такой путь, у которого начальная вершина совпадает с конеч­ной. Сетевой график — это ориентированный граф без конту­ров. В сетевом моделировании имеются два основных элемен­та — работа и событие.

Работа — это активный процесс, требующий затрат ресур­сов, либо пассивный (ожидание), приводящий к достижению намеченного резалта.

Фиктивная работа — это связь между результатами работ (событиями), не требующая затрат времени и ресурсов.

Событие — это резалт (промежуточный или конечный) выполнения одной или нескольких предшествующих работ.

Путь — это любая непрерывная последовательность (цепь) работ и событий.

Критический путь — это путь, не имеющий резервов и включающий самые напряженные работы комплекса. Работы, расположенные на критическом пути, называют критически­ми. Все остальные работы являются некритическими (нена­пряженными) и обладают резервами времени, которые позво­ляют передвигать сроки их выполнения, не влияя на общую продолжительность выполнения всего комплекса работ.

При построении сетевых моделей необходимо соблюдать следующие правила.

1. Сеть изображается слева направо, и каждое событие с большим порядковым номером изображается правее преды­дущего. Общее направление стрелок, изображающих работы, также в основном должно быть расположено слева направо, при этом каждая работа должна выходить из события с мень­шим номером и входить в событие с большим номером.

2. Два соседних события могут объединяться лишь одной работой. Для изображения параллельных работ вводятся про­межуточное событие и фиктивная работа (рис. 30.1).

3. В сети не должно быть тупиков, т.е. промежуточных событий, из которых не выходит ни одна работа (рис. 30.2).

4. В сети не должно быть промежуточных событий, кото­рым не предшествует хотя бы одна работа (рис. 30.3).

5. В сети не должно быть замкнутых контуров, состоя­щих из взаимосвязанных работ, создающих замкнутую цепь (рис. 30.4). Для правильной нумерации событий поступают следующим образом: нумерация событий начинается с исход­ного события, которому дается номер 1. Из исходного собы­тия 1 вычеркивают все исходящие из него работы, на остав­шейся сети вновь находят событие, в которое не входит ни одна работа. Этому событию дается номер 2. Затем вычеркивают работы, выходящие из события 2, и вновь находят на остав­шейся части сети событие, в которое не входит ни одна работа, ему присваивается номер 3, и так продолжается до заверша­ющего события. Пример нумерации сетевого графика показан на рис. 30.5.

Продолжительность выполнения работ устанавливается на основании действующих нормативов или по экспертным оцен­кам специалистов. В первом случае временные оценки являют­ся детерминированными (однозначными), во втором — стохас­тическими (вероятностными).

Рассмотрим в качестве примера программу создания но­вого бытового прибора, пользующегося спросом у населения. Необходимые данные приведены в табл. 30.1.

На основании данных таблицы построим сетевой график создания прибора с учетом вышеизложенных рекомендаций (рис. 30.6).

18.Основные логические операции. Булевы функции. Совершенные формы и минимизация функциональных и релейно-контактных схем.Основные логические операции : В алгебре логики существует три основные операции:

Логическое отрицание {инверсия).

Обозначается: ¯А,  ¬A, not А, не А. Высказывание  ¬А истинно при ложном А и ¬А ложно при истинном А.

Логическое умножение {конъюнкция).

Обозначается А&В, A and В, А*В, А^В, АВ, А и В. Высказывание А ^ В истинно тогда и только тогда, когда оба высказывания А и В истинны.

Логическое сложение {дизъюнкция).

Обозначается: A v В, A or В, А + В, А или В. Высказывание A v В ложно тогда и только тогда, когда оба высказывания А и В ложны. Остальные операции алгебры логики выражаются через первые три опе­рации: отрицание, конъюнкцию и дизъюнкцию. Перечислим их.

Логическое следование {импликация).

Обозначается: А → В, А => В. Высказывание А → В ложно только тогда, когда А истинно, а В ложно. Важно: в операции импликации посылка А не обязана быть истинной, в отличие от логического оператора в языках программирования «если А, то В». Импликация выражается через дизъюнкцию и отрицание: А => В = A v В.

Эквивалентность (равносильность, необходимо и достаточно).

Обозначается: А ~ В, А <=> В, А = В. Высказывание А <=> В истинно тогда и только тогда, когда значения А и В совпадают. Эквивалентность выражается через отрицание, дизъюнкцию и конъюнкцию: А <=> В = (¬А v В) ^ (¬B v А).

Исключающее ИЛИ.

Обозначается A XOR В. Высказывание A XOR В истинно, когда А и В не равны.

Порядок исполнения операций задается круглыми скобками. При отсутствии скобок порядок выполнения операций следующий: отрицание, конъюнкция, дизъюнкция, импликация, эквивалентность. Формула алгебры логики (или составное высказывание) состоит из нескольких высказываний, соединенных логическими операциями. Исходные высказывания могут быть логическими переменными или логическими константами (имеющими постоянное значение ИСТИНА или ЛОЖЬ). Логическая функция определяется на множестве логических переменных и логических констант, принимающих значение ИСТИНА или ЛОЖЬ. Значение функции вычисляется в результате выполнения логических операций с (или над) логическими операндами. Например:

F (А, В, С) = А ^ (¬ В v С);      F(x1, х2, х3) = ¬x1 v х2 ^ ¬ х3

Логическую функцию можно задать двумя способами: логической формулой или таблицей истинности.

Понятие булевой функции

В курсе математического анализа изучаются функции, определённые на числовой прямой или на отрезке числовой прямой или на (гипер-) плоскости и т.п. Так или иначе область определения – непрерывное мн-во. В курсе дискретной математики изучаться должны функции, область определения которых – дискретное мн-во*. Простейшим (но нетривиальным) таким множеством является мн-во, состоящее из двух элементов.* Так мы и приходим к понятию булевой функции.

Определение 1 (Булева функция). Булевой функцией от n аргументов называется функция f из n-ой степени мн-ва { 0, 1 } в мн-во { 0, 1 }.

Иначе говоря, булева функция – это функция, и аргументы и значение которой принадлежит множеству { 0, 1 }. Мн-во { 0, 1 } мы будем в дальнейшем обозначать через B.

Булеву функцию от n аргументов можно рассматривать как n-местную алгебраическую операцию на множестве B. При этом алгебра <B;>, где  – мн-во всевозможных булевых функций называется алгеброй логики.

Конечность области определения функции имеет важное преимущество – такие функции можно задавать перечислением значений при различных значениях аргументов. Для того, чтобы задать значение функции от n переменных, надо определить значения для каждого из 2n наборов. Эти значения записывают в таблицу в порядке соответсвующих двоичных чисел. В результате получается таблица следующего вида:

x1

x2

...

xn-1

xn

f

0

0

...

0

0

f(0,0,...,0,0)

0

0

...

0

1

f(0,0,...,0,1)

0

0

...

1

0

f(0,0,...,1,0)

0

0

...

1

1

f(0,0,...,1,1)

...

...

...

...

...

...

1

1

...

0

0

f(1,1,...,0,0)

1

1

...

0

1

f(1,1,...,0,1)

1

1

...

1

0

f(1,1,...,1,0)

1

1

...

1

1

f(1,1,...,1,1)

Раз у нас есть стандартный порядок записывания наборов, то для того, чтобы задать функцию, нам достаточно выписать значения f(0,0,...,0,0), f(0,0,...,0,1), f(0,0,...,1,0), f(0,0,...,1,1),..., f(1,1,...,0,0), f(1,1,...,0,1), f(1,1,...,1,0), f(1,1,...,1,1). Этот набор называют вектором значений функции.

Таким образом, различных функций n переменных столько, сколько различных двоичных наборов длины 2n*. А их 22n.

Мн-во B содержит два элемента – их можно рассматривать как булевы функции от нуля (пустого мн-ва) переменных – константу 0 и константу 1.

Функций от одной переменной четыре: это константа 0, константа 1, тождественная функция, т.е. функция, значение которой совпадает с аргументом и так называемая функция ``отрицание''. Отрицание будем обозначать символом ¬ как унарную операцию. Приведём таблицы этих четырёх функций:

x

0

x

¬ x

1

0

0

0

1

1

1

0

1

0

1

Как видим, функции от некоторого числа переменных можно рассматривать как функции от большего числа переменных. При этом значения функции не меняется при изменении этих ``добавочных'' переменных. Такие переменные называются фиктивными, в отличие от остальных – существенных.

Совершенная нормальная дизъюнктивная форма (СНДФ) - ФАЛ, заданная в виде Рассмотрим основные свойства СНДФ:

в СНДФ нет двух одинаковых минтермов;

в СНДФ ни один минтерм не содержит двух одинаковых множителей (переменных);

в СНДФ ни один минтерм не содержит вместе с переменной и ее отрицание.

На основании этих свойств можно предложить следующийалгоритм получения СНДФ из таблицы истинности:

Теорема Любая ФАЛ, кроме абсолютно истинной функции, может быть представлена в совершенной конъюнктивной нормальной форме (СНКФ): Это представление более громоздкое, чем представление этой функции в СНДФ, так как в таблице много строк, для которых f = 0 . В рассмотренных ранее объединениях термов были использованы для записи термов и операции ИЛИ, НЕ, а также И, НЕ. Можно использовать также набор из импликации и отрицания (НЕ). Способы преобразования НФ в СНФ. Совершенная нормальная форма отличается от нормальной формы (НФ) тем, что всегда содержит термы только максимального ранга и дает однозначное представление функции. Произвольная нормальная дизъюнктивная форма (НДФ) переводится в СНДФ следующим образом. Пусть

Если сравнить в смысле минимальности различные формы представлений ФАЛ, станет ясно, что нормальные формы экономичнее совершенных нормальных форм. Но, с другой стороны, нормальные формы не дают однозначного представления. Минимальная форма представления ФАЛ - форма представления ФАЛ, которая содержит минимальное количество термов и переменных в термах (т. е. минимальная форма не допускает никаких упрощений). Например, функция является минимальной формой и, наоборот, функция может быть упрощена, если к этому выражению применить распределительный закон, т.е. Следовательно, упрощение сложных логических выражений может быть осуществлено по основным законам и аксиомам, изложенным выше.