- •Глава 16. Специальные циклы и метрика графов 345
- •Глава 17. Графовые инварианты 404
- •Введение
- •Цели и задачи преподавания дисциплины «дискретная математика»
- •Модуль 1. Основы Теории множеств (2 кредита)
- •Комплексная цель и задачи изучения модуля
- •Глава 1. Исчисление множеств
- •1.1. Понятие множества
- •1.2. Способы задания множеств
- •1.3. Подмножество
- •2. Пустое множество не имеет собственных и истинных подмножеств.
- •3. Одноэлементное множество имеет два подмножества - сaмo себя и , т.Е. Не имеет собственных подмножеств.
- •Множество – это многое, мыслимое как единое.
- •Глава 2. Операции над множествами
- •2.1. Объединение множеств
- •2.2. Пересечение множеств
- •2.3. Разность множеств
- •2.4. Дополнение множества
- •2.5. Тождества алгебры множеств
- •2.6. Доказательства тождеств с множествами
- •Глава 3. Упорядоченные множества
- •3.1. Кортеж (Упорядоченное множество)
- •3.2. Декартово произведение
- •3.3. Операция проектирования множеств
- •3.4. График
- •Декартово произведение множеств позволяет перейти к графическому представлению упорядоченных множеств.
- •Глава 4. Отношения
- •4.1. Основные понятия отношений
- •4.2. Основные свойства отношений
- •4.3. Операции над отношениями
- •4.4. Основные свойства специальных отношений
- •4.5. Разбиение множеств
- •4.6. Отношение порядка
- •Использование отношений позволяет строить модели взаимосвязей между любыми обьектами в природе.
- •5. Соответствия
- •5.1. Определение соответствия
- •5.2. Операции над соответствиями
- •5.3. Понятия образа и прообраза при соответствии
- •5.4. Доказательства тождеств с соответствиями
- •5.5. Основные свойства соответствий
- •5.6. Функция
- •Глава 6. Упорядоченные бесконечные множества
- •6.1. Основные сведения об упорядоченных бесконечных множествах
- •6.2. Проблема континуума
- •Глава 7. Основные понятия теории мультимножеств
- •7.1. Понятие мультимножества
- •7.2. Операции над мультимножествами
- •Возможность многократного вхождения элементов в мультимножество создает новое качество и позволяет расширить класс описываемых, анализируемых и синтезируемых математических объектов.
- •8. Нечеткие множества
- •8.1. Нечеткие высказывания
- •8.2. Операции над нечеткими множествами
- •8.3. Нечеткие отношения и соответствия
- •Тестовые задания к модулю 1
- •24. Множество называется графиком, если каждый его элемент ...
- •25. Соответствие может быть задано … способом.
- •Критерии оценки
- •Нечеткие и приближенные высказывания, множества, соответствия и отношения позволяют формально задавать расплывчатую информацию в виде, удобном для обработки на эвм.
- •Глоссарий к модулю 1
- •Глава 1.
- •Глава 2.
- •Глава 3.
- •Глава 4.
- •Глава 5.
- •Глава 6.
- •Глава 7.
- •Глава 8.
- •Галилей Модуль 2. Основы теории алгоритмов (1,5 кредита) Комплексная цель и задачи изучения модуля
- •Глава 9. Введение в теорию алгоритмов
- •9.1. Понятие алгоритма
- •9.2. Основные свойства алгоритмов
- •9.3. Классификация алгоритмов
- •Контрольные вопросы
- •Задания для самостоятельной работы
- •10.1. Преобразование слов в произвольных абстрактных алфавитах
- •10.2. Числовые функции
- •10.3. Построение алгоритмов по принципу «разделяй и властвуй»
- •10.4. Представление алгоритма в виде детерминированного устройства
- •10.5. Универсальные схемы алгоритмов
- •10.5. “Жадные” алгоритмы
- •10.6. Нечеткие (расплывчатые) алгоритмы
- •Контрольные вопросы
- •Задания для самостоятельной работы
- •11.1. Анализ алгоритмов
- •11.2. Сложность алгоритмов
- •Контрольные вопросы
- •Задания для самостоятельной работы
- •Тестовые задания к модулю 2
- •Критерии оценки
- •Модуль 3. Алгебра логики (1,5 кредита) Комплексная цель и задачи изучения модуля
- •Глава 12. Элементы алгебры логики
- •12.1. Логические функции
- •12.2. Основные логические тождества и законы
- •12.3. Булевы функции одной и двух переменных
- •Контрольные вопросы
- •Задания для самостоятельной работы
- •13.1. Дизъюнктивная и конъюнктивная нормальные формы
- •13.2. Способы перехода от нормальных к совершенным нормальным формам
- •2. Графический способ.
- •13.4. Функциональная полнота бф
- •13.3. Алгебра Жегалкина
- •Контрольные вопросы
- •Задания для самостоятельной работы
- •14.1. Реализация булевых функций
- •14.2. Минимизация булевых функций
- •14.3. Карты Карно
- •14.4. Метод Квайна - Мак-Класски
- •14.5. Переход от бф к простейшим комбинационным схемам
- •Контрольные вопросы
- •Задания для самостоятельной работы
- •Критерии оценки
- •Глоссарий к модулю 3
- •Модуль 4. Основы Теории графОв (2 кредита) Комплексная цель и задачи изучения модуля
- •Глава 15. Введение в теорию графов
- •15.1. Способы задания графов и виды графов
- •15.1.1. Способы задания графов
- •15.1.2. Виды графов
- •15.1.3. Нечеткие неориентированные графы
- •Примеры решения задач
- •Вопросы для самоконтроля
- •Задания для самостоятельной работы
- •15.2. Маршруты, цепи, циклы
- •Примеры решения задач
- •Вопросы для самоконтроля
- •Задания для самостоятельной работы
- •При моделировании систем модели и алгоритмы нахождения маршрутов, цепей, циклов, разрезов, связности графов позволяют строить эффективные алгоритмы преобразования графов.
- •15.3. Нахождение кратчайших маршрутов (цепей)
- •15.3.1. Алгоритм Форда
- •15.3.2. Алгоритм Дейкстры
- •Примеры решения задач
- •Вопросы для самоконтроля
- •Задания для самостоятельной работы
- •Алгоритмы Форда и Дейкстры являются эффективным способом определения кратчайшей по стоимости цепи между двумя вершинами графа.
- •Глава 16. Специальные циклы и метрика графов
- •16.1. Эйлеровы и гамильтоновы цепи и циклы
- •16.1.1. Связь между эйлеровыми и гамильтоновыми графами
- •Примеры решения задач
- •Вопросы для самоконтроля
- •Задания для самостоятельной работы
- •16.2. Алгоритмы построения гамильтонова цикла
- •16.2.1. Алгоритм Робертса ─ Флореса
- •16.2.2. Алгебраический метод
- •Примеры решения задач
- •Вопросы для самоконтроля
- •Задания для самостоятельной работы
- •16.3. Задача о коммивояжере и алгоритмы ее решения
- •16.3.1. Алгоритм Хелда и Карпа
- •16.3.2. Геометрический метод решения
- •Примеры решения задач
- •Вопросы для самоконтроля
- •Задания для самостоятельной работы
- •16.4. Расстояния на графах
- •Примеры решения задач
- •Вопросы для самоконтроля
- •Задания для самостоятельной работы
- •16.5. Деревья
- •Примеры решения задач
- •Вопросы для самоконтроля
- •Задания для самостоятельной работы
- •Глава 17. Графовые инварианты
- •17.1. Цикломатическое и хроматическое числа графа
- •Примеры решения задач
- •Вопросы для самоконтроля
- •Задания для самостоятельной работы
- •17.2. Числа внутренней и внешней устойчивости графа
- •Примеры решения задач
- •Вопросы для самоконтроля
- •Задания для самостоятельной работы
- •Числа внутренней и внешней устойчивости относятся к инвариантам графа. Они позволяют определить специальные группы вершин в графах.
- •17.3. Планарность графов
- •17.3.1. Плоские и планарные графы
- •17.3.2. Эвристики для определения планарности
- •17.3.3. Минимизация пересечений ребер графов
- •Вопросы для самоконтроля
- •Задания для самостоятельной работы
- •17.4. Ориентированные графы
- •17.4.1. Способы задания
- •17.4.2. Решение стандартных графовых задач с использованием орграфов
- •17.4.3. Выделение сильносвязных компонент
- •17.4.4. Нечеткие ориентированные графы
- •Примеры решения задач
- •Вопросы
- •Задания для самостоятельной работы
- •175 Гиперграфы
- •Примеры решения задач
- •Вопросы для самоконтроля
- •Задания для самостоятельной работы
- •Тестовые задания к модулю 4
- •Критерии оценки
- •Глоссарий к модулю 4 Глоссарий к главе 1
- •Глоссарий к главе 2
- •Глоссарий к главе 3
- •Библиографический комментарий
- •Литература
- •Заключение
- •Приложение 1
- •Учебное издание Гладков Леонид Анатольевич, Курейчик Владимир Викторович, Курейчик Виктор Михайлович
15.3.2. Алгоритм Дейкстры
Рассмотрим алгоритм Дейкстры нахождения кратчайшей цепи между двумя заданными вершинами хs и хt.
Метод основан на приписывании вершинам временных пометок, причем пометка вершины xi дает верхнюю границу длины пути от вершины хs к этой вершине. Значения этих пометок постепенно уменьшаются на основе итерационной процедуры и на каждом шаге итерации точно одна из временных пометок становится постоянной. Это говорит о том, что пометка дает длину кратчайшей цепи от вершины хs к рассматриваемой вершине.
Алгоритм:
Пусть l(xi) ─ пометка xi.
(блок присвоения начальных значений)
1. Пусть l(s) = 0. Положим l(xi) = для всех xi s и считаем их пометки временными; пусть p = s.
(блок обновления пометок)
2. Для всех xi Г(p), пометки которых временные, изменить пометки в соответствии с выражением
l(xi) min[l(xi); l(p) + r(p, xi)] (15.9)
(блок превращения пометки в постоянную)
3. Среди всех вершин с временными пометками найти такую, что l(xi *) =
= min[l(xi)].
4. Считать пометку xi* постоянной и положить p = xi*.
5.
а) Если надо построить цепь от вершины хs к вершине хt:
Если p = t, то l(p) ─ длина кратчайшей цепи, останов.
Если p t, переход к п. 2.
б) Если надо построить цепь от вершины хs ко всем остальным вершинам:
Если все вершины отмечены как постоянные, то эти пометки дают длины кратчайших цепей, останов.
Если некоторые вершины являются временными, переход к п. 2.
Рассмотрим последовательность выполнения алгоритма Дейкстра на примере построения кратчайших цепей в графе (см. рис. 15.31).
Матрица смежности графа G имеет следующий вид:
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
|
1 |
0 |
4 |
5 |
9 |
0 |
2 |
0 |
. |
2 |
4 |
0 |
0 |
0 |
0 |
5 |
6 |
|
3 |
5 |
0 |
0 |
3 |
3 |
0 |
7 |
|
R = 4 |
9 |
0 |
3 |
0 |
8 |
0 |
0 |
|
5 |
0 |
0 |
3 |
8 |
0 |
0 |
1 |
|
6 |
2 |
5 |
0 |
0 |
0 |
0 |
3 |
|
7 |
0 |
6 |
7 |
0 |
1 |
3 |
0 |
Постоянные пометки будем обозначать *, остальные считаются временными.
Вначале нам необходимо выбрать начальную вершину xs, которую мы будем использовать в дальнейшем, в качестве фиксированной. Примем в качестве такой вершины x1. Метки всех остальных вершин, отличных от вершины x1, считаем равными , а значение p = x1.
1. L(x1) = 0*. L(xi) = , xi x1, p = x1.
Теперь приступим к выполнению алгоритма нахождения кратчайших по стоимости путей.
Первая итерация
2. Для всех вершин, смежных с начальной вершиной x1 и имеющих временные метки (x1) = {x2, x3, x4, x6}, пересчитываем в соответствии с выражением (15.9) действующие значения их меток.
Для l(x2) min[ ; 0*+ 4 ] = 4.
Для l(x3) min[ ; 0*+ 5 ] = 5.
Для l(x4) min[ ; 0*+ 9 ] = 9.
Для l(x6) min[ ; 0*+ 2 ] = 2.
3. Выбираем из списка вершин с временными метками вершину с временной меткой, имеющей минимальное значение:
Min [ 4, 5 , 9, , 2, ]
x2 x3 x4 x5 x6 x7
Очевидно, что такой вершиной является вершина x6.
4. Вершина x6 получает постоянную пометку l(x6) = 2*, значение p = x6.
5. Поскольку не все вершины имеют постоянные пометки, переходим к п. 2.
Вторая итерация
2. Для всех вершин, смежных с текущей вершиной x6 и имеющих временные метки (x6) = {x2, x7}, пересчитываем в соответствии с выражением (15.9) действующие значения их меток:
Для l(x2) min[ 4 ; 2*+ 5 ] = 4.
Для l(x7) min[ ; 2*+ 3 ] = 5.
Новое значение метки для вершины x2 оказалось больше текущего, поэтому оставляем текущее значение временной метки, а для вершины x7 заменяем значение l(x7) = на полученное значение l(x7) = 5.
3. Выбираем из списка вершин с временными метками вершину с временной меткой, имеющей минимальное значение:
Min[ 4, 5, 9, , 5]
x2 x3 x4 x5 x7
Очевидно, что такой вершиной является вершина x2.
4. Вершина x2 получает постоянную пометку l(x2) = 4*, значение p = x2.
5. Поскольку не все вершины имеют постоянные пометки, переходим к п. 2.
Третья итерация
2. Для всех вершин, смежных с текущей вершиной x2 и имеющих временные метки (x2) = {x7}, пересчитываем в соответствии с выражением (15.9) действующие значения их меток.
Для l(x7) min[ 5 ; 4*+ 6 ] = 5.
Новое значение метки для вершины x7 оказалось больше текущего, поэтому оставляем текущее значение временной метки l(x7) = 5.
3. Выбираем из списка вершин с временными метками вершину с временной меткой, имеющей минимальное значение:
Min [ 5 , 9, , 5 ]
x3 x4 x5 x7
В данном случае две вершины имеют одинаковые метки l(x3) = l(x7) = 5 и мы можем выбрать любую из них. Пусть это будет вершина x3.
4. Вершина x3 получает постоянную пометку l(x3) = 5*, значение p = x3.
5. Поскольку не все вершины имеют постоянные пометки, переходим к п. 2.
Четвертая итерация
2. Для всех вершин, смежных с текущей вершиной x3 и имеющих временные метки (x3) = {x4, x5, x7} пересчитываем в соответствии с выражением (1.9) действующие значения их меток:
для l(x4) min[ 9 ; 5*+ 3 ] = 8,
для l(x5) min[ ; 5*+ 3 ] = 8,
для l(x7) min[ 5 ; 5*+ 7 ] = 5.
Новое значение метки для вершины x7 оказалось больше текущего, поэтому оставляем текущее значение временной метки, а для вершин x4 и x5 заменяем текущие значения меток на новые.
3. Выбираем из списка вершин с временными метками, вершину с временной меткой, имеющей минимальное значение:
Min [ 8, 8, 5 ]
x4 x5 x7
Очевидно, что такой вершиной является вершина x7.
4. Вершина x7 получает постоянную пометку l(x7) = 5*, значение p = x7.
5. Не все вершины имеют постоянные пометки, переходим к п. 2.
Пятая итерация
2. Для всех вершин, смежных с текущей вершиной x7 и имеющих временные метки (x7) = {x5}, пересчитываем в соответствии с выражением (15.9) действующие значения их меток.
Для l(x5) min[ 8 ; 5*+ 1 ] = 6.
3. Выбираем из списка вершин с временными метками вершину с временной меткой, имеющей минимальное значение:
Min [ 8, 6 ]
x4 x5
Такой вершиной является вершина x5.
4. Вершина x5 получает постоянную пометку l(x5) = 6*, значение p = x5.
5. Поскольку не все вершины имеют постоянные пометки, переходим к п. 2.
Шестая итерация
2. Из вершин, смежных с текущей вершиной x3 и имеющих временные метки осталась только вершина x4: (x1) = {x4}. Пересчитываем значение ее метки в соответствии с выражением (15.9):
для l(x4) min[ 8 ; 6*+ 8 ] = 8.
Новое значение метки для вершины x4 оказалось больше текущего, поэтому оставляем текущее значение временной метки.
3. В списке вершин с временными метками только один элемент:
Min [ 8, ]
x4
4. Вершина x4 получает постоянную пометку l(x4) = 8*, значение p = x4.
5. Поскольку все вершины графа имеют постоянные метки, конец алгоритма.
Таким образом, мы построили кратчайшие пути от вершины x1 до вершин x2, x3, x6 напрямую:
x1 x2(4*), x1 x3(5*), x1 x6(2*),
а до вершин x4, x5, x7 через промежуточные:
x1 x3 x4(8*);
x1 x6 x7 x5(6*);
x1 x6 x7(5*).
Длину цепи xs xi, т.е. суммарную стоимость весов пройденных ребер, можно получить при помощи рекурсивной процедуры:
l(xs) + r(xs, xj) = l(xi),
т.е. проверяется, какая из вершин, смежных вершине xs, дает вместе с весом ребра r(xs, xj) сумму, равную l(xi).
Например: l(x4) = 8. Поскольку вершина x4 напрямую не связана с вершиной x1, то определим кратчайший путь из x1 в x4:
l(x1) = l(x4) ─ r(x3, x4) = 8 – 3 = 5 = l(x3) - r(x1, x3) = 5 – 5 = 0.
Таким образом, построена кратчайшая цепь между вершинами x1 и x4: x1 x3 x4.
