- •010400.62 Прикладная математика и информатика
- •Предисловие
- •1. Элементы математической логики
- •1.1. Логические связки и их таблицы истинности
- •1.2. Свойства логических операций
- •1.3. Функции алгебры логики и их свойства
- •1.4. Совершенные формы
- •1.5. Многочлены Жегалкина
- •Примеры решения задач
- •Упражнения
- •Вопросы для самоконтроля и повторения
- •2. Множества и отображения
- •2.1. Множества
- •2.2. Операции над множествами.
- •2.3. Свойства операций над множествами
- •2.4. Отображения множеств
- •Примеры решения задач
- •Упражнения
- •Вопросы для самоконтроля и повторения
- •3. Элементы комбинаторного анализа
- •Примеры решения задач
- •Упражнения
- •Вопросы для самоконтроля и повторения
- •4. Элементы теории графов
- •4.1. Основные понятия теории графов
- •4.2. Основные операции над графами
- •4.3. Матрицы графов
- •4.4. Мосты, деревья
- •4.5. Алгоритмы построения минимального остовного дерева
- •4.6 Задача о кратчайшем пути и алгоритм Дейкстры для ее решения
- •4.7. Дерево кратчайших путей
- •4.8. Гамильтоновы циклы и гамильтоновы графы
- •4.9. Эйлеровы циклы и эйлеровы графы
- •Примеры решения задач
- •Алгоритм Дейкстры-Прима
- •Упражнения
- •Вопросы для самоконтроля и повторения
- •5. Теория кодирования
- •5.1. Основные понятия теории кодирования
- •5.2. Проблема взаимной однозначности
- •5.3. Коды Хемминга
- •Примеры решения задач
- •Упражнения
- •Вопросы для самоконтроля и повторения
- •6. Теория автоматов
- •6.1. Основные понятия теории автоматов
- •6.2. Способы задания конечного автомата
- •Примеры решения задач
- •Упражнения
- •Вопросы для самоконтроля и повторения
- •7. Задания для самостоятельной работы
- •Библиографический список
- •Мария Николаевна Рыжкова Андрей Владимирович Макаров
- •010400.62 Прикладная математика и информатика
4.8. Гамильтоновы циклы и гамильтоновы графы
Гамильтонов путь (или гамильтонова цепь) — путь (цепь), содержащий каждую вершину графа ровно один раз. Гамильтонов путь, начальная и конечная вершины которого совпадают, называется гамильтоновым циклом. Гамильтонов цикл является простым остовным циклом.
Гамильтонов граф — в теории графов это граф, содержащий гамильтонову цепь или гамильтонов цикл.
В графе, изображенном на рис. 4.13 слева, гамильтоновым циклом является, например, последовательность 1, 2, 3, 5, 4, 1. В графе, изображенном в центре, нет гамильтоновых циклов, но есть гамильтоновы пути, например, 2, 1, 3, 5, 4. В правом графе нет и гамильтоновых путей.
Наиболее рациональный подход при отыскании гамильтонова цикла в графе состоит в рассмотрении всевозможных простых путей, начинающихся в произвольно выбранной стартовой вершине a, до тех пор, пока не будет обнаружен гамильтонов цикл или все возможные пути не будут исследованы.
Рис. 4.13
Поиск необходимого и достаточного условия для того, чтобы граф был гамильтоновым, стал одной из главных нерешенных задач теории графов!
Теорема Дирака: Если в простом графе с n 3 вершинами степень (v) n/2 для любой вершины v, то граф G является гамильтоновым.
4.9. Эйлеровы циклы и эйлеровы графы
Эйлеров путь (эйлерова цепь) в графе — это путь, проходящий по всем рёбрам графа и притом только по одному разу. Эйлеров цикл — это эйлеров путь, являющийся циклом. Эйлеров граф — граф, содержащий эйлеров цикл. Полуэйлеров граф — граф, содержащий эйлеров путь (цепь).
Теорема Эйлера:
Для того чтобы данный связный граф был эйлеровым, необходимо и достаточно, чтобы степени всех вершин были четными. Данный связный граф будет полуэйлеровым тогда и только тогда, когда степени двух вершин будут нечетными, а степени остальных вершин – четными.
а) б) в)
Рис.4.14 Графы: а) – эйлеров, б) – полуэйлеров, в) не эйлеров.
Алгоритм Флёри нахождения эйлерова цикла:
Пусть G – эйлеров граф; тогда следующая процедура всегда возможна и приводит к построению эйлеровой цепи графа G. Выходя из произвольной вершины u, идем по ребрам графа произвольным образом, соблюдая лишь следующие правила:
1). Стираем ребра по мере их прохождения и стираем также изолированные вершины, которые при этом образуются;
2). На каждом этапе идем по мосту только тогда, когда нет других возможностей (или другими словами, не проходить по ребру, если удаление этого ребра приводит к разбиению графа на две связные компоненты).
Очевидно, что для того чтобы построить эйлеров путь достаточно использовать алгоритм Флери, который надо начать с вершины, имеющей нечетную степень.
Примеры решения задач
1) Построить матрицу смежности, достижимости и инциденций графа, изображенного на рис. 4.15.
Рис. 4.15
Решение:
a) Матрица смежности – квадратная матрица, для данного графа размером 66, по количеству вершин, 0 ставим, если две вершины не соединены друг с другом ребром, иначе 1:
b) Матрица достижимости – квадратная матрица, для данного графа размером 66, по количеству вершин, учитывает ориентированность графа, 1 ставим, если из некоторой вершины можно достичь другую, следуя по направлениям ребер, иначе 0. Например, из вершины x3 нельзя достичь ни одной вершины, т.к. оба ребра входят в вершину, но ни одного не выходит, а из 6-й вершины можно достичь любой другой вершины, но ни из какой вершины нельзя достичь 6-ю вершину, т.к. оба ребра выходят из 6-й вершины и ни одного не входит (не считая петлю).
c) Матрица инциденций – матрица размером 610, по числу вершин 6 и ребер 10, учитывает ориентированность графа, 1 ставим, если ребро выходит из некоторой вершины, -1 – если входит в вершину, иначе 0.
2) Пусть есть 6 городов, которые необходимо соединить дорогами, так, чтобы можно было добраться из любого города в любой другой (напрямую или через другие города). Разрешается строить дороги между заданными парами городов и известна стоимость строительства каждой такой дороги.
|
1 |
2 |
3 |
4 |
5 |
6 |
1 |
|
3 |
2 |
1 |
6 |
2 |
2 |
|
|
5 |
4 |
1 |
7 |
3 |
|
|
|
3 |
2 |
4 |
4 |
|
|
|
|
1 |
6 |
5 |
|
|
|
|
|
5 |
6 |
|
|
|
|
|
|
Граф задан матрицей смежности, где вместо единиц указаны веса – стоимость строительства дороги из пункта a в пункт b. Требуется решить, какие именно дороги нужно строить, чтобы минимизировать общую стоимость строительства.
Решение:
Представим каждый город вершиной графа, а его ребра – дороги, соединяющие города. Для отыскания кратчайших путей в графе используем алгоритм Дейкстры-Прима.
Таблица 4.1
