- •Введение
- •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. Задания для самостоятельной работы
- •Литература
Волновой алгоритм построения длиннейшего пути во взвешенном графе
Используется волновой алгоритм построения кратчайшего пути для взвешенного графа со следующими отличиями.
1. В п. 1 волнового алгоритма построения кратчайшего пути присваиваем всем вершинам вес 0, тогда автоматически будут строиться длиннейшие пути.
2. В п. 2 алгоритма полагаем .
Пример 3.3. Найти длиннейший путь в графе (рис. 3.3) между вер-
ш
Рассмотрим
краткое решение этой
задачи.
1.
Результаты прямого прохода алгоритма
приведены в табл. 3.4.
2.
Обратный ход:
Таблица 3.4
x1 |
x2 |
x3 |
x4 |
x5 |
x6 |
M |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
4 |
0 |
0 |
0 |
2,3 |
0 |
1 |
4 |
6 |
0 |
0 |
3,4 |
0 |
1 |
4 |
6 |
8 |
0 |
4,5 |
0 |
1 |
4 |
6 |
8 |
10 |
5,6 |
0 |
1 |
4 |
6 |
8 |
10 |
6 |
0 |
1 |
4 |
6 |
8 |
10 |
|
Дуги-претенденты: (x1 x2), (x1 x3), (x2 x4), (x3 x4), (x3 x5), (x4 x6), (x5 x6).
3. Построены три длиннейшие пути:
L1: (x1 x2),(x2 x4), (x4 x6); L2: (x1 x3), (x3 x4), (x4 x6); L3: (x1 x3), (x3 x5), (x5 x6).
3.3. Нахождение компонент связности
Вершины xi и xj слабо связны, если в графе существует путь (xi, xj).
Вершины xi и xj сильно связны, если существуют пути (xi, xj) и (xj, xi).
Если в графе нет путей из xi в xj и нет обратного пути из xj в xi, то вершины xi и xj несвязны. Для неориентированного графа имеет смысл только понятие сильной связности.
Компонентой связности называется максимальное подмножество сильно связанных между собой вершин.
Отношение связности рефлексивно, симметрично, транзитивно, т. е. является отношением эквивалентности, и однозначно разбивает множество вершин графа на компоненты связности.
Пример 3.4: Задан граф (рис.3.4). Найти его компоненты связности.
Данный
граф может быть разбит на следующие
компоненты связности:
1){x1,x2,x3,x4};
2){x5,x6,x7}; 3){x8}
Между
компонентами - только слабая связность:
есть пути из вершин
1-й
компоненты в вершины 2-й
и
3-ей компоненты,
а
также из вершин 2-й компоненты
в
вершину 3-ей.
Рис.
3.4
Алгоритм построения компонент связности в неориентированном графе
1. i=0. Все вершины графа не отмечены.
2. i=i+1. Выбираем очередную неотмеченную вершину, отмечаем её и все связанные с нею вершины значением индекса i с помощью распространения волны отметок по ребрам, идущих от уже отмеченных индексом i вершин. Таким образом выделяется i компонента связности. Если есть ещё неотмеченные вершины, то выполняется п.2, иначе выделение компонент связности закончено.
Пример 3.5
Рис. 3.5
Решение:
1. i=0
2. i=1. Отмечаем индексом i=1 вершину x1 и связанные с ней вершины x3, x7 и x9. Получена первая компонента связности: k1 {x1,x3,x7,x9 }
2. i=2. Отметим индексом i=2 вершину x2 и вершины x6,x10. Построена вторая компонента связности:k2 {x2,x6,x10}
2. i=3. Отмечаются индексом i=3 вершины x4 и x8 . Построена третья компонента связности: k3 {x4, x8 }.
2. i=4. Отмечаются индексом i=4 вершину x5, которая формирует четвертую компоненту связности – k4 {x5}