- •Предисловие
- •Тема 1. Элементы теории множеств и комбинаторики
- •§1. Понятие множества. Операции над множествами
- •Примеры решения задач
- •Задачи для самостоятельного решения
- •§2. Отображение множеств
- •Примеры решения задач
- •Задачи для самостоятельного решения
- •§3. Мощность множества
- •Примеры решения задач
- •Задачи для самостоятельного решения
- •§4. Основы комбинаторики
- •Пример решения задач
- •Задачи для самостоятельного решения
- •§5. Отношение на множестве
- •Примеры решения задач
- •Задачи для самостоятельного решения
- •Тема 2. Теория графов
- •§1. Основные понятия теории графов: графы, ориентированные и неориентированные графы, пути, маршруты, циклы
- •Примеры решения задач
- •Задачи для самостоятельного решения
- •§2. Понятие связности, смежности и инцидентности
- •Примеры решения задач
- •Задачи для самостоятельного решения
- •§3. Задача о кратчайшем пути
- •Примеры решения задач
- •Задачи для самостоятельного решения
- •§4 Задача Эйлера. Плоские, планарные и не планарные графы. Формула Эйлера
- •Примеры решения задач
- •Задачи для самостоятельного решения
- •§5. Раскраска графа. Хроматическое число и характеристический индекс графа
- •Алгоритм решения задачи о раскраске вершин графа
- •Алгоритм решения задачи о раскраске ребер графа
- •Примеры решения задач
- •Задачи для самостоятельного решения
- •§ 6. Представление графов в памяти компьютера. Код Харари
- •Примеры решения задач
- •Задачи для самостоятельного решения
- •Примеры решения задач
- •Задачи для самостоятельного решения
- •§8. Обход дерева. Понятие списка. Деревья и списки
- •Примеры решения задач
- •Задачи для самостоятельного решения
- •Тема 3. Булевы функции
- •§1. Совершенная дизъюнктивная нормальная форма (сднф)
- •Примеры решения задач
- •Задачи для самостоятельного решения
- •§ 2. Совершенная конъюнктивная нормальная форма (скнф)
- •Примеры решения задач
- •Задачи для самостоятельного решения
- •§3. Многочлены Жегалкина
- •Примеры решения задач
- •Задачи для самостоятельного решения
- •§4. Булевы функции и их свойства
- •Примеры решения задач
- •Задачи для самостоятельного решения
- •§5. Функциональная полнота. Теорема Поста
- •Примеры решения задач
- •Задачи для самостоятельного решения
- •Список рекомендуемой литературы Основная
- •Дополнительная
§3. Задача о кратчайшем пути
Исторически сложились три задачи о поиске пути в графе.
Задача 1. Найти любой путь (цепь) из А в В.
Задача 2. Найти кратчайший путь из А в В в смысле количества ребер (дуг).
Алгоритм решения задачи о нахождении кратчайшего пути из А в В в смысле наименьшего количества ребер:
Вершине А припишем индекс 0.
Всем вершинам, смежным с А, припишем индекс 1.
Всем вершинам, смежным с вершинами индекса 1 и не имеющим индекса, припишем индекс 2 и т.д.
Как только вершина В получит некоторый индекс, процесс присвоения останавливается. Значение индекса n вершины В и есть длина кратчайшего пути из А в В. Построим этот путь.
Среди вершин, смежных с В, обязательно найдется вершина с индексом n-1 (одна или несколько), возвращаемся в эту вершину и продолжаем этот процесс.
Через n шагов придем в вершину с индексом 0, т.е. в А. Один или несколько путей построены.
Если каждому ребру (дуге) графа приписано некоторое число k0 (вес ребра), то граф называется взвешенным (нагруженным)
Задача 3. Найти кратчайший путь из А в В во взвешенном графе (в смысле суммы весов ребер (дуг)).
Приведем алгоритм решения задачи 3.
Будем постепенно приписывать всем вершинам графа числовые индексы:
Вершине А припишем индекс 0, всем остальным вершинам значение +.
Будем постепенно перебирать все пары смежных вершин vx и vy. Каждый раз проверим первенство , если оно
vy
выполняется, то уменьшаем индекс , заменив его на.
vx
Процесс останавливаем, когда ни один индекс уже нельзя уменьшить. В этот момент вершина В имеет некий индекс . Это и есть наименьшая сумма весов всех дуг.
Построим путь с такой суммой. Будем возвращаться из вершины В в А. Среди вершин, смежных с В, обязательно найдется вершина С, для которой выполняется точно равенство В=С+СВ.
Возвращаемся к С и повторяем процесс. Поскольку индексы все время уменьшаются, то через несколько шагов придем в вершину с индексом 0, т.е. вершину А.
Примеры решения задач
Задача 1. Задан граф.
v6
v7 v5 v2 v8
v1
v4
v3
Найти кратчайший путь из вершины v1 в вершину v8.
Решение. Используя алгоритм задачи о нахождении кратчайшего пути из v1 в v8 в смысле наименьшего количества ребер, получим:
Вершине v1 припишем индекс 0.
Всем вершинам, смежным с v1 (v2 и v3), припишем индекс 1.
Всем вершинам, смежным v2 и v3 и не имеющим индекса (v5,v4,v6,v7), припишем индекс 2.
Всем вершинам, смежным с вершинами (v4,v5,v6,v7) и не имеющим индекса v8, припишем индекс 3.
Таким образом, вершина v8 получила индекс 3, а значит, длина кратчайшего пути из v1 в v8 равна 3. Построим этот путь или пути, если их несколько.
Среди вершин, смежных с v8, найдем вершины с индексом 3-1=2. Таких вершин три: v6,v7, v4.
Среди вершин, смежных с v4,v6,v7, найдем вершины с индексом 1. Таких вершин две: v2 и v3.
Среди вершин, смежных с v2 и v3, найдем вершины с индексом 0. Такая вершина одна и это v1.
Таким образом, было получено три кратчайших пути длины 3. Перечислим их: 1) v1,v2,v6,v8; 2) v1,v3,v7,v8; 3) v1,v3,v4,v8.
v6
(2)
v7
(2) v5
(2) v2
(1) v8
(3)
v1
(0)
v4
(2)
v3
(1)
Задача 2. Задан орграф.
4 v5
v2
2 5 3 1
6 2 v6 v4 v1
5
1 2 1 v7
3 v3
Найти кратчайший путь из вершины v1 в вершину v6 в смысле суммы весов дуг.
Решение. Используя алгоритм решения задачи о нахождении кратчайшего пути в смысле суммы весов дуг, получим:
Вершине v1 присвоим индекс 0, а всем остальным +.
Переберем вершины орграфа, смежные с вершиной v1 и имеющие дугу из v1 в эту же вершину. Вершине v4 присвоим индекс 0+2=2, так как 2<+. Вершине v3 присвоим индекс min {0+1, 2+2}=1, так как 1<+. Вершине v2 присвоим индекс min{0+1, 2+5}=2, так как 1<+.
Аналогично проведем рассуждения для вершин орграфа, смежных с вершинами v2,v3,v4. Так как в вершину v5 ведет две дуги, то присвоим ей индекс min{1+4, 2+3}=5<+. Вершине v7 присвоим индекс min{2+5, 1+3}=4<+.
Вершине v6 присвоим индекс min{5+2, 2+6, 4+1}=4+1=5. Таким образом, кратчайший путь из вершины v1 в v6 в смысле суммы весов дуг равен 5.
Построим этот путь.
Среди вершин, смежных с вершиной v6, найдем вершину С, для которой выполняется равенство . Такой вершиной являетсяv7, так как или 4+1=5.
Среди вершин, смежных с вершиной v7, найдем вершину Д, для которой выполняется равенство . Такой вершиной являетсяv3, так как или 1+3.
Среди вершин, смежных с вершиной v3, найдем такую вершину Е, для которой выполняется равенство . Такая вершина одна и этоv1.
Таким образом, мы вернулись из вершины v6 в вершину v1.
Запишем кратчайший путь из v1 в v6: v1 v3 v7 v6.
v5
(5) v2
(1)
2 5 3 1
6 2 v6 v4(2) v1
(0)
5
1 2 1
3 v7(4) v3
(1)