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

Алгоритм генерирует последовательность согласованных меток для вершин бесконтурного орграфа 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-той строки и j-гo столбца мы обозначаем наличие дуги от вершины с номером i к вершине с номером j. Дуга, по определению, является путем длины 1. Булево произведение матрицы М с самой собой обозначается через M 2. В этой матрице буква И символизирует наличие пути длины 2. По матрице M 3 = М . М . М можно определить все пути длины 3, и вообще, матрица Мk хранит сведения о путях длины k. Наконец, в матрице достижимости

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

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

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

Алгоритм топологической сортировки - student2.ru

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

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

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

Алгоритм топологической сортировки - student2.ru

Алгоритм топологической сортировки - student2.ru

Рис. 4.32.

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

Алгоритм топологической сортировки - student2.ru

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

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

Алгоритм топологической сортировки - student2.ru

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

Алгоритм топологической сортировки - student2.ru

Отметим, например, что буква И в верхнем правом углу матрицы М* появляется из матрицы М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

Алгоритм топологической сортировки - student2.ru

Рис. 4.33

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

Алгоритм топологической сортировки - student2.ru

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

Алгоритм топологической сортировки - student2.ru

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

Алгоритм топологической сортировки - student2.ru

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

Алгоритм топологической сортировки - student2.ru

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

Алгоритм топологической сортировки - student2.ru

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

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

Алгоритм топологической сортировки - student2.ru

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

Кратчайший путь

Рассмотрим задачу поиска кратчайшего пути, связывающего пару данных вершин в нагруженном орграфе. Слово «кратчайший» здесь вполне уместно, поскольку довольно часто веса в орграфе — это расстояния между пунктами.

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

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

Алгоритм топологической сортировки - student2.ru

Рис. 4.34. Нагруженный граф

Существует множество алгоритмов поиска кратчайшего пути, но мы познакомимся только с одним, алгоритмом Дейкстры.

Перед формальным изложением алгоритма мы опишем его действия и проиллюстрируем работу алгоритма на нашем примере. Допустим, что нужно найти кратчайший путь от вершины А к любой другой вершине орграфа (см. рис. 8.5). Кратчайший путь — это путь минимального общего веса, соединяющий выбранные вершины. Общий вес, по определению, равен сумме весов всех дуг, составляющих путь. Общий вес кратчайшего пути, ведущего из вершины и в вершину v , называют расстоянием от и до v.

Определим весовую матрицу w, чьи элементы w(u, v) задаются формулой

Алгоритм топологической сортировки - student2.ru

Для нашего графа весовая матрица выглядит следующим образом:

Алгоритм топологической сортировки - student2.ru

В течение работы алгоритма каждой вершине v орграфа присваивается число d[v], равное расстоянию от вершины А до v. Перед началом работы d[v] совпадает с весом дуги (A, v), если такая существует, или равно ∞ в противном случае. Мы будем проходить вершины орграфа и уточнять значения d[v].

На каждом шагу алгоритма отмечается одна вершина и, до которой уже найден кратчайший путь от A и расстояние d[u] до нее. Далее полученное значение d[u] отмеченной вершины не меняется. Для оставшихся, неотмеченных вершин v, число d[v] будет меняется с учетом того, что искомый кратчайший путь до них от А будет проходить через последнюю отмеченную вершину и. Алгоритм завершится в тот момент, когда все возможные вершины будут отмечены и получат свои окончательные значения d[v].

Для каждого шага алгоритма, описанного ниже, в соответствующую строку табл. 4.6 заносится отмеченная вершина, текущие значения d[v] и оставшиеся неотмеченные вершины. При этом полужирным шрифтом выделяется наименьшее из значений d[v] среди неотмеченных вершин. Соответствующую вершину следует отметить. Кроме того, в таблице все значения d[v] для уже отмеченных вершин отделены от остальных ломаной линией.

Таблица 4.6

Шаг Отмеченные вершины Расстояние до вершины Неотмеченные вершины
А B C D E F
A Алгоритм топологической сортировки - student2.ru Алгоритм топологической сортировки - student2.ru Алгоритм топологической сортировки - student2.ru B,C,D,E,F,
B Алгоритм топологической сортировки - student2.ru C,D,E,F
C Алгоритм топологической сортировки - student2.ru D,E,F
D Алгоритм топологической сортировки - student2.ru E,F
E F
F  

Шаг 0 Поскольку мы интересуемся кратчайшими путями от вершины А, мы ее отмечаем и используем первую строку весовой матрицы w для определения начальных значений d[v]. Таким образом, получается первая строка таблицы. Наименьшее число из всех d[v] для неотмеченных вершин — это d[B] = 2.

Шаг 1 Отмечаем вершину В, так как она является ближайшей к А. Вычисляем длины путей, ведущих от A к неотмеченным вершинам через вершину В. Если новые значения d[v] оказываются меньше старых, то меняем последние на новые. Итак, при этом проходе цикла путь ABC имеет вес 3, а путь ABE — 6, в то время как старые расстояния до этих вершин от А были ∞. Следовательно, заполняя вторую строку таблицы, мы заменим d[C] на 3 и d[E] на 6.

Шаг 2 Из оставшихся неотмеченными, вершины С и D находятся ближе всех к А. Отметить можно любую из них. Возьмем вершину D. Так как длина пути ADE равна 5, текущее значение d[E] следует уменьшить до 5. Теперь можно за­полнить третью строчку таблицы. Наименьшее значение d[v] среди неотмеченных к этому моменту вершин оказывается у вершины С.

Шаг 3 Отмечаем вершину С и подправляем значения d[v]. Теперь можно дойти и до вершины F, следуя путем А В C F. Его длина, а стало быть и значение d[F], равны 8. К этому моменту остались неотмеченными две вершины: Е и F.

Шаг 4 Мы отмечаем вершину Е, что позволяет нам уменьшитьвеличину d[F] с 8 до 6.

Шаг 5 Отмечаем вершину F.

Алгоритм Дейкстры

Алгоритм Е. Дейктры основан на двух идеях:

1. Присваивании вершинам графа временных и окончательных меток и формулировке правила пересчета этих меток (пересчет меток называется релаксацией ребер); при этом окончательные метки и есть длины кратчайших путей;

2. Использовании экстремального свойства кратчайшего пути: если кратчайший путь из вершины х в вершину y проходит через вершину z, то его отрезок от вершины х до вершины z является кратчайшим путем от вершины х до вершины z, а его отрезок от вершины z до вершины у является кратчайшим путем от вершины z до вершины у.

Алгоритм поиска кратчайшего пути, начиная от вершины s, просматривает граф, помечая вершины xi значениями-метками их расстояний от вершины s. Временная метка xi – это минимальное расстояние от вершины s к вершине xi , когда в определении пути на графе учитываются не все маршруты между этими вершинами.

Алгоритм Дейкстры решает задачу о кратчайших путях от фиксированной вершины для взвешенного орграфа G=(V,E), в котором веса всех дуг неотрицательны, ко всем остальным вершинам графа. В процессе работы алгоритма поддерживается множество Алгоритм топологической сортировки - student2.ru , состоящее из вершин v, для которых расстояние d(s,v) уже найдено. Алгоритм выбирает вершину u из очереди T = V \ S с наименьшим расстоянием d(s,v) добавляет вершину u к множеству S и производит пересчет меток всех вершин из очереди Т, с которыми связаны вершины из множества S, в цикле до тех пор, пока очередь Т не станет пустой. При этом в цикле новые вершины в очередь не добавляются и каждая вершина, удаляемая из очереди Т, добавляется к множеству S лишь один раз. Таким образом, число итераций (шагов) в цикле равно мощности множества вершин Алгоритм топологической сортировки - student2.ru .

Текущее состояние вычислительного процесса состоит в том, что все множество вершин графа фактически разбивается на три подмножества:

- S – множество вершин, расстояние до которых уже вычислено; вначале это множество состоит из одной начальной вершины;

- Алгоритм топологической сортировки - student2.ru – множество вершин, расстояние до которых вычисляется ;

- Алгоритм топологической сортировки - student2.ru – множество вершин, расстояние до которых будет вычислено.

Алгоритм Дейкстры состоит в следующем:

Шаг 0. Начальное состояние. Обозначим через s начальную вершину, а через m(s) – метку произвольной вершины х. Вначале вершине s присваивается окончательная метка 0 (нулевое расстояние до самой себя), т.е. m(s)=0, а всем остальным вершинам присваивается временная метка Алгоритм топологической сортировки - student2.ru . Кроме того, полагаем Алгоритм топологической сортировки - student2.ru . Здесь под метками подразумевается некоторое расстояние (длина пути) от начальной вершины до других вершин Алгоритм топологической сортировки - student2.ru , Алгоритм топологической сортировки - student2.ru , при этом Алгоритм топологической сортировки - student2.ru .

Шаг 1. Правило пересчета меток. Пересчитываются только те метки вершин Алгоритм топологической сортировки - student2.ru , для которых существуют дуги, ведущие из вершин Алгоритм топологической сортировки - student2.ru , по формуле Алгоритм топологической сортировки - student2.ru

Шаг 2. Изменение множеств (массивов) S и T. Из вершин, метки которых были пересчитаны, выбираем вершину t, имеющую наименьшую метку, и находи множества Алгоритм топологической сортировки - student2.ru и Алгоритм топологической сортировки - student2.ru .

Шаг 3. Условие выхода из цикла. Если Алгоритм топологической сортировки - student2.ru , то нужно перейти к следующему шагу 4, в противном случае нужно выполнить присваивание: Алгоритм топологической сортировки - student2.ru и перейти к шагу 1.

Шаг 4. Величина m(s) – длина кратчайшего пути из вершины s в вершину х. Если Алгоритм топологической сортировки - student2.ru , то пути из вершины s в вершину х на графе не существует.

Пример 5. Для орграфа, заданного на рисунке 4.35., найти длины кратчайших путей от вершины s ко всем остальным вершинам и восстановить кратчайшие пути к ним. Проиллюстрировать выполнение алгоритма Дейкстры с помощью последовательности рисунков графа так, чтобы было видно, как выбирается вершина для очередной итерации.

Решение: Сведем решение задачи в табл. 4.7, окончательные метки в которой выделены полужирным шрифтом.

Таблица 4.7

Номер шага перерасчета меток Множество S Очередь Алгоритм топологической сортировки - student2.ru s x y u v
Алгоритм топологической сортировки - student2.ru Алгоритм топологической сортировки - student2.ru Алгоритм топологической сортировки - student2.ru Алгоритм топологической сортировки - student2.ru Алгоритм топологической сортировки - student2.ru Алгоритм топологической сортировки - student2.ru
Алгоритм топологической сортировки - student2.ru Алгоритм топологической сортировки - student2.ru Алгоритм топологической сортировки - student2.ru Алгоритм топологической сортировки - student2.ru
Алгоритм топологической сортировки - student2.ru Алгоритм топологической сортировки - student2.ru
Алгоритм топологической сортировки - student2.ru Алгоритм топологической сортировки - student2.ru
Алгоритм топологической сортировки - student2.ru Ø

Длины кратчайших путей от вершины s до остальных вершин будут равны Алгоритм топологической сортировки - student2.ru , Алгоритм топологической сортировки - student2.ru , Алгоритм топологической сортировки - student2.ru , Алгоритм топологической сортировки - student2.ru .

Кратчайшие пути будут соответственно равны:

Алгоритм топологической сортировки - student2.ru ;

Алгоритм топологической сортировки - student2.ru ;

Алгоритм топологической сортировки - student2.ru ;

Алгоритм топологической сортировки - student2.ru .

Восстановление кратчайших путей происходит в обратном порядке.

На следующем рисунке приведена графическая иллюстрация алгоритма Дейкстры. Исходная вершина – крайняя левая. Вершины закрашенные черным цветом, лежат в множестве S, остальные вершины находятся в очереди Алгоритм топологической сортировки - student2.ru . Вершина, заштрихованная серым цветом имеет минимальную метку и выбирается в качестве очередной вершины при следующей итерации. Утолщенные дуги образуют деревья кратчайших путей с корнем в исходной вершине s на каждом шаге итерации. При окончании алгоритма мы получим полное дерево кратчайших путей с корнем в вершине s.

При реализации алгоритма Дейкстры на ЭВМ граф представляется матрицей весов дуг, соединяющих вершины. Матрица весов является простым обобщением матрицы смежности графа.

Алгоритм топологической сортировки - student2.ru Алгоритм топологической сортировки - student2.ru

Алгоритм топологической сортировки - student2.ru Алгоритм топологической сортировки - student2.ru

Алгоритм топологической сортировки - student2.ru Алгоритм топологической сортировки - student2.ru

Алгоритм топологической сортировки - student2.ru

Рис. 4.35. Графическая реализация алгоритма Дейкстры.

Контрольные вопросы.

1. Что представляет собой орграф? В каких случаях они применяются?

2. Что в орграфе называется антецедентом?

3. Дать определение пути и контура в орграфе.

4. Какой граф называют бесконтурным? Пояснить случаи их применения и дать их кодовое название.

5. Что такое последовательность согласованных меток?

6. Рассказать смысл алгоритма топологической сортировки.

7. Что называется матрицей достижимости и что она характеризует?

8. Рассказать об алгоритме Уоршелла.

9. Как осуществляется поиск кратчайшего пути.

10. Пояснить смысл алгоритма Дейкстры и перечислить его структуру.

11. Что называется весовой матрицей и где и для чего она определяется?

12. Что называется полустепенью исхода и полустепенью захода вершины?

13. Дать определение связного орграфа.

Наши рекомендации