- •Введение
- •1. Алгоритмы сортировки
- •1.1. Общие положения
- •1.2. Сортировка простыми включениями
- •Словесное описание алгоритма
- •1.3. Сортировка простым выбором
- •1.4. Сортировка простым обменом
- •1.5. Задания для самостоятельной работы
- •2. Алгоритмы покрытия
- •2.1. Постановка задачи покрытия
- •2. 2. Алгоритм полного перебора
- •2. 3. Алгоритм граничного перебора по вогнутому множеству
- •2.4. Алгоритмы, использующие сокращение таблицы покрытий
- •1. Для случая построения одного кратчайшего покрытия
- •2. В случае построения минимального покрытия
- •3. При условии построения всех безызбыточных покрытий
- •2.5. Алгоритм приближенного решения задачи о покрытии
- •2.6. Задачи для самостоятельной работы
- •3. Алгоритмы на графах
- •3.1. Общие положения
- •3.2. Алгоритмы нахождения оптимального пути
- •Волновой алгоритм построения кратчайшего пути для взвешенного графа
- •Волновой алгоритм построения длиннейшего пути во взвешенном графе
- •3.3. Нахождение компонент связности
- •Алгоритм построения компонент связности в неориентированном графе
- •Пример 3.5
- •3.4. Алгоритмы нахождения подграфов
- •3.5. Дерево. Остов
- •Пример 3.7.
- •Алгоритм построения произвольного остова
- •Алгоритм построения минимального остова
- •Алгоритм построения системы независимых циклов графа
- •Пример 3.12.
- •3.6. Алгоритм кратчайшей раскраски графа
- •3.7. Задачи для самостоятельной работы
- •4. Конечные автоматы
- •4.1. Общие положения
- •4.2. Представление автомата
- •4.3. Взаимные преобразования автоматов
- •4.4. Определение реакции автомата на входное слово
- •4.5. Задания для самостоятельной работы
- •5. Машины тьюринга
- •5.1. Общие положения
- •5.2. Операции над машинами Тьюринга
- •6. Структуры данных
- •6.1. Списки
- •6.2. Двусвязный список
- •6.3. Кольцевой список
- •6.4. Стек
- •6.5. Очередь
- •6.6. Задания для самостоятельной работы
- •Литература
3. Алгоритмы на графах
Цель практического занятия по данной теме - освоение идей основных алгоритмов на графах и приобретение навыков в использовании этих алгоритмов.
3.1. Общие положения
Графом G=(X, E) называется совокупность двух конечных множеств: множества точек, которые называются вершинами (Х={x1, …, xn}) и множества связей в парах вершин (xi, xjE), которые называются дугами или ребрами в зависимости от наличия или отсутствия направленности связи.
Ребром называются две встречные дуги (xi, xj) и (xj, xi). На графе они изображаются одной линией без стрелки (рис. 3.1). Ребро, у которoго концевые вершины совпадают, называются петлей; то же относится и к дуге.
Рис. 3.1
Если на каждом ребре задаётся направление, то граф (X, E) называется ориентированным. В противном случае граф называется неориентированным.
Две вершины, являющиеся концевыми для некоторого ребра или некоторой дуги, называются смежными. Вершина и ребро (дуга) называются инцидентными друг другу, если вершина является для этого ребра (дуги) концевой точкой. Соответственно, граф может быть представлен матрицей смежности либо матрицей инцидентности.
Матрицей смежности называется прямоугольная таблица, у которой число строк и число столбцов одинаково и равно числу вершин. Элементы матрицы задаются следующим образом: “1” отмечается наличие соответствующей дуги (направление принимается от буквы, именующей строку, к букве, именующей столбец), “0” отсутствие связи вершин; “1” на главной диагонали таблицы означает наличие петли на графе.
Матрицей инцидентности называется прямоугольная таблица с числом строк, равным числу вершин графа, и с числом столбцов, равным количеству рёбер (дуг) графа. Элементы матрицы aij задаются следующим образом: “1” ставится в случае, если вершина xi инцидентна ребру (xi , xj), “0” - в противном случае.
Пример 3.1. На рис. 3.1 изображён граф, имеющий четыре вершины X={x1, x2, x3, x4}, четыре дуги (x1, x3), (x2, x1), (x2, x3), (x3, x2) и два ребра (x1, x4), (x4, x5). Для вершины x1 смежными являются вершины: x2, x3 и x4, а инцидентными - дуги (x1, x3), (x2, x1) и ребро (x1, x4). Матрица смежности представлена табл. 3.1, а матрица инцидентности – табл. 3.2.
Таблица 3.1 Таблица 3.2
G |
x1 |
x2 |
x3 |
x4 |
|
G |
1 |
2 |
3 |
4 |
5 |
6 |
x1 |
0 |
0 |
1 |
1 |
x1 |
1 |
1 |
0 |
1 |
0 |
0 | |
x2 |
1 |
0 |
0 |
1 |
x2 |
0 |
1 |
1 |
0 |
1 |
0 | |
x3 |
0 |
1 |
0 |
1 |
x3 |
0 |
0 |
0 |
1 |
1 |
1 | |
x4 |
1 |
0 |
1 |
1 |
x4 |
1 |
0 |
1 |
0 |
0 |
1 |
Взвешенным называется граф, если задана функция веса lij на дугах графа, которая характеризует, например, длину дуги (xi, xj), время пребывания на дуге, пропускную способность дуги и т. д.; чаще всего lij0.
Функция веса задаётся в матричном виде (с - конечное число):
; (3.1)
тогда в матрице смежности вместо 1 ставится c.
Для ориентированного графа определяются следующие понятия:
1. Исход вершины E(xi) - множество вершин xj, таких, что (xi, xj)E.
2. Вход вершины E1(xi) - множество вершин xi, таких что (xj, xi)E.
3. Степень исхода - мощность S(xi) =E(xi) множества исхода.
4. Степень входа - мощность S1(xi)=E1(xi) множества входа.
Для графа (рис. 3.1) рассмотрим исходы и входы вершин x1 и x4. Имеем:
E(x1)= {x3, x4}; (x1, x3), (x1, x4)E; E(x4)= {x1, x3}; (x4, x1), (x4, x3)E;
E1(x1)={x2, x4}; (x2, x1), (x4, x1)E;
E1(x4)={x1, x2, x3}; (x1, x4), (x2, x4), (x3, x4)E.
Для тех же вершин x1 и x4 степени исхода и входа соответственно равны S(x1)=2, S(x4)=2; S1(x1)=2, S1(x4)=3.
Для неориентированного графа степень S(xi)=E(xi) вершины xi равна числу рёбер, инцидентных этой вершине.