Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
графы.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
2.09 Mб
Скачать

Алгоритм топологической сортировки

Алгоритм генерирует последовательность согласованных меток для вершин бесконтурного орграфа G = (V, Е). В самом начале работы алгоритма антецеденты каждой вершины v записываются в множество A(v). Алгоритм успешно присваивает метки вершинам. Каждая вершина получает очередную метку в том случае, если у нее нет неотмеченных антецедентов.

Пример 2. Найдите последовательность меток для орграфа, изображенного на рис. 4.31.

Решение.

Шаг О Множество антецедентов выглядит следующим образом: A(А) = {В}, А(В) = {С}, А(С) = {Н}, A(D) = {С}, A{Е) = {D,G}, A(F) = {E}, A(G) = {С} и А(Н) =Ø.

Шаг 1 Назначить метку 1 вершине Н и удалить вершину Н из всех оставшихся множеств A(v). А(A) = {В}, А(В) = {С}, А(С) = 0, A(D) = {С}, А(E) = {D,G}, A(F) = {Е} и A(G) = {С}.

Шаг 2 Назначить метку 2 вершине С и удалить вершину С из всех оставшихся множеств A(v). A(А) = {В}, A(В) = Ø, A(D) = Ø, A(Е) = {D,G}, A(F) = {Е} и A(G) = Ø.

Шаг 3 Теперь у нас появился выбор: какой вершине присвоить очередную метку? В зависимости от нашего выбора, получатся разные последовательности меток. Присвоим, например, метку 3 вершине В, и удалим В из множеств A(v). А(А) = Ø, A(D) = Ø, A(Е) = {D, G}, A(F) = {Е} и A(G) = Ø.

Шаг 4 Мы снова стоим перед выбором.Назначим метку 4 вершине А и удалим вершину А из A(u). A(D) = Ø, А(Е) = {D,G}, A(F) = {Е} и A(G) = Ø.

Шаг 5 Назначим метку 5 вершине D и удалим вершину D из A(u). А(Е) = {G}, A(F) = {Е} и A(G) = Ø.

Шаг 6 Назначим метку 6 вершине G и удалим вершину G из A(u). A(E) = Ø, и A(F) = Ø.

Шаг 7 Назначаем метку 7 вершине Е и удаляем Е из списка A(u). Останется только A(F) = Ø.

Шаг 8 Назначаем метку 8 вершине F.

Итак, один из возможных приоритетных списков: Н, С, В, А, D, G, E, F. Он дает нам порядок, в котором можно изучать курсы, соблюдая должную последовательность.

Пути в орграфах

Ориентированные графы успешно применяются для схематичного изображения аэролиний, соединяющих города всего мира, или коммуникационных сетей между компьютерами. В таких сетях важно знать последовательность выключений любого соединения (дуги или вершины) по всей сети.

Например, если самолет не может приземлиться для дозаправки в некотором городе вследствие неблагоприятных погодных условий, то ошибка в его переадресации грозит катастрофой: ему может не хватить горючего для достижения неправильно назначенного аэропорта. Аналогично, если одна или несколько цепей в компьютерной сети не работают, то для некоторых пользователей отдельные серверы могут оказаться вообще недоступными.

Таким образом, мы приходим к задаче о поиске путей между произвольной парой вершин в ориентированном графе.

Пусть G = (V, Е) — орграф с n вершинами, а М — его матрица смежности. Напомним, что буквой И на пересечении i-той строки и jo столбца мы обозначаем наличие дуги от вершины с номером i к вершине с номером j. Дуга, по определению, является путем длины 1. Булево произведение матрицы М с самой собой обозначается через M 2. В этой матрице буква И символизирует наличие пути длины 2. По матрице M 3 = М . М . М можно определить все пути длины 3, и вообще, матрица Мk хранит сведения о путях длины k. Наконец, в матрице достижимости

М* = М или М 2 или ... или М n

записаны пути любой длины между вершинами.

Если у нас есть две логические матрицы одного размера, то в результате логической операции или получится матрица, чьи элементы — результат применения этой операции к соответствующим элементам двух данных матриц. Более точно,

Матрица достижимости орграфа G = (V, Е) фактически является матрицей замыкания по транзитивности Е* отношения Е на вершинах орграфа G.

Пример 3. Вычислите матрицу достижимости орграфа, представленного на рис. 4.32.

Решение. Прежде всего, напишем матрицу смежности орграфа.

Рис. 4.32.

Квадрат матрицы М равен:

Заметим, что буква И в матрице М2 соответствует путям длины 2 в орграфе G, а именно: abc, abd и bdc.

Дальнейшие вычисления приводят к третьей и четвертой степеням матрицы М.

Следовательно,

Отметим, например, что буква И в верхнем правом углу матрицы М* появляется из матрицы М2 и соответствует пути abd.

Для больших орграфов вычисление матрицы М* с помощью возведения М все в большую степень утомительно и неэффективно.

Более удобный путь определения М* дает так называемый алгоритм Уоршелла. Пусть G = (V, Е) — орграф с вершинами u1, u2, ..., un. Алгоритм Уоршелла генерирует последовательность матриц W0 = М, W1, W2, Wn, причем элемент матрицы Wk (к ≥1), стоящий на пересечении i-ой строки и j-ro столбца Wk(i, j), равен И в том и только том случае, когда существует путь (произвольной длины) из вершины ui в вершину uj с внутренними вершинами из множества {u1, u2, ..., uk}. Матрица Wo совпадает с матрицей смежности М орграфа, а Wn — искомая матрица достижимости М*.

Для лучшего понимания работы алгоритма Уоршелла, необходимо с его помощью вручную вычислить матрицу достижимости какого-нибудь орграфа. За каждый проход цикла (пронумерованный индексом к) алгоритм Уоршелла генерирует матрицу Wk , используя элементы предыдущей матрицы Wk-1.

Чтобы найти i-ую строку матрицы Wk , нам следует вычислить выражения:

Wk-1(i,j)) или (Wk-1(i, k) и Wk-1(k, j)) (1)

при разных значениях j.

Если Wk-1(i, к) = Л, то (Wk-1(i, k;) и Wk-1(k, j)) = Л, и значение выражения (1) совпадает со значением Wk-1(i, j). Иначе говоря, i-ая строка матрицы остается неизменной. В том же случае, когда Wk-1(i, к) = И, вычисление выражения (1) сводится к вычислению (Wk-1(i, к) и Wk-1(k, j)). При этом i-ая строка получается с помощью логической операции или из текущей строки i и текущей строки k. Говоря более аккуратно, при вычислении Wk поступают следующим образом.

1. Берем k-ый столбец матрицы Wk-1.

2. Строку с номером I (i= 1, ..., п), у которой на k-ом месте стоит Л, переписываем в i-ую строку матрицы Wk .

3. Строку с номером i(i=1, ..., п), у которой на k-ом месте стоит И, спариваем с помощью операции или с k-ой строкой, а результат записываем в i-ую строку матрицы Wk.

Пример 4. С помощью алгоритма Уоршелла вычислите матрицу достижимости орграфа, изображенного на рис. 4.33

Рис. 4.33

Решение. Матрица W0 совпадает с матрицей смежности данного орграфа.

Теперь вычисляем W1. Учитывая первый шаг, мы рассматриваем 1-ый столбец матрицы W0. Следуя указаниям шага 2, скопируем строки матрицы W0 с номерами 1, 2 и 4 в матрицу W1 на те же места. Таким образом,

Далее, согласно шагу 3, строка с номером 3 матрицы W1 получается с помощью логической операции или из 1-ой и 3-ей строк матрицы W0. Поэтому

Опять применяем шаг 3 алгоритма для вычисления 5-ой строки матрицы W1 с помощью операции или, примененной к 5-ой и 1-ой строкам матрицы W0. Получаем

Матрица W1 вычислена. Теперь строим матрицу W2, по матрице W1. Взгляд на 2-ой столбец матрицы W1 показывает, что строки с номерами 2 и 4 копируются в W2. Первая строка матрицы W2 - результат применения операции или к 1-ой и 2-ой строкам из W1. Третья строка в W2 получается спариванием 3-ей и 2-ой строк матрицы W1. И, наконец, пятая строка W2 — результат логической операции или, примененной к 5-ой и 2-ой строкам W1. Значит,

Отметим, в частности, что на пересечении 3-ей строки и 3-го столбца матрицы W2 стоит буква И. Это означает, что существует контур, начинающийся и заканчивающийся в вершине 3, проходящий через одну или обе вершины с номерами 1 и 2. Посмотрев на изображение орграфа (рис. 4), убеждаемся, что действительно существует контур длины 3: 3123.

Аналогичным образом вычисляется матрица W3.

Поскольку из вершины 4 не выходит ни одной дуги, то мы не сможем построить ни одного пути, проходящего через вершину 4. Следовательно, матрица W4 совпадает с W3. Кроме того, в орграфе отсутствуют дуги, ведущие в вершину 5. Значит, нет и путей, через нее проходящих, т.е. W5 = W4. Наконец, W5 = М*, поскольку граф