logo
DM_shpory

37. Перенумерация вершин графа. Алгоритм топологической сортировки.

Лемма. В произвольном бесконтруном ргафе вершины можно пронумеровать так, что каждая дуга будет иметь вид <Vi,Vj>, где i<j

Алгоритм нумерации вершин бесконтурного графа. Данные: Ориентированный бесконтурный граф <V, E> , определяемый списками инцидентности ЗАПИСЬ [v], v V. Результаты: Для каждой вершины v V номер NR[v], такой что для произвольной дуги б u, E выполняется неравенство NR[u] < NR[v].

1 begin

2 for v V do ЧЗАХ [v] := 0;

{ ЧЗАХ [v] = число дуг, заходящих в v }

3 for u V do

4 for v ЗАПИСЬ [u] do

ЧЗАХ [v] := ЧЗАХ [v] + 1;

5 СТЕК := Ж ;

6 for v V do

7 if ЧЗАХ [v]= 0 then СТЕКЬ v;

8 num := 0;

9 while СТЕК ¹ Ж do

10 begin u СТЕК;

11 num := num + 1; NR[u] := num;

12 for v О ЗАПИСЬ [u] do

13 begin ЧЗАХ [v]:= ЧЗАХ [v] -1;

14 if ЧЗАХ [v]= 0 then СТЕКЬ v;

15 end

16 end

17 end

Легко заметить, что каждая дуга анализируется алгоритмом один раз в строке 4 и один раз в строке 12.

Таким образом, сложность алгоритма есть O(m) (остается в силе предположение m = W (n), в противном случае следовало бы написать O(m + n)).

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

Будем рассматривать ориентированные графы G = VE, дугам которых приписаны веса. Это означает, что каждой дуге u, v  E поставлено в соответствие некоторое вещественное число (u, v), называемое весом данной дуги.

Полагаем, кроме того, (u, v) = , если uv. 

Если последовательность вершин v0, v1,..., vp определяет путь в G, то его длина определяется как сумма

.

(Отметим, что если в произвольном графе мы примем вес каждой дуги равным единице, то мы получим обычное определение длины пути как числа дуг; длина пути равна 0 при p = 0).

Нас будет интересовать нахождение кратчайшего пути между фиксированными вершинами s, t V. Длину такого кратчайшего пути мы будем обозначать d (s, t) и называть расстоянием от s до t (расстояние, определенное таким образом, может быть отрицательным). Если не существует ни одного пути из s в t, то полагаем d (s, t) = . Если каждый контур нашего графа имеет положительную длину, то кратчайший путь будет всегда элементарным путем, т.е. в последовательности v1,..., vp не будет повторов.

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

Можно дать много практических интерпретаций задачи о кратчайших путях. Например, вершины могут соответствовать городам, а каждая дуга — некоторому пути, длина которого представлена весом дуги. Мы ищем затем кратчайшие пути между городами. Вес дуги также может соответствовать стоимости (или времени) передачи информации между вершинами. В таком случае мы ищем самый дешевый (или самый скорый) путь передачи информации. Еще одну ситуацию получаем, когда вес дуги u, v равен вероятности p(u, v) безаварийной работы канала передачи информации. Если предположить, что аварии каналов не зависят друг от друга, то вероятность исправности пути передачи информации равна произведению вероятностей составляющих его дуг. Задачу нахождения наиболее надежного пути легко можно свести к задаче о кратчайшем пути, заменяя веса p(u, v) на (u, v) = – log p(u, v).