Назад в библиотеку

          Построение кратчайшего пути в графе при помощи локальной редукции графа

 Авторы: Н.В. Ногина, А.В. Билык
 Источник: Сучасна інформаційна Україна: інформатика, економіка, філософія / Матерiали VI мiжнародної науково-практичної конференцiї студентiв, аспiрантiв та молодих вчених.  Донецьк, ДонНТУ  2012, секція 2, с. 76 - 79. [Перейти]

   Аннотация

   Ногина Н.В., Билык А.В. Построение кратчайшего пути в графе при помощи локальной редукции графа. Рассмотрен алгоритм построения кратчайшего пути в помеченном графе при помощи локальной редукции графа

   Общая постановка проблемы

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

Помеченным графом назовем восьмерку G=(Q, E, X, Y, µ, ρ, q0, F), где Q – конечное множество вершин, E – множество дуг, X – множество отметок вершин, Y – множество отметок дуг, µ: QX – функция разметки вершин, ρ: EY – функция разметки дуг, q0 – начальная вершина, F–множество финальных вершин. Предполага­ется, что множества  Q, E, X, Y – конечны, а пометки y – положительные действительные числа.

Путем в графе G будем называть конечную последовательность l = q1 e1 q2 e2ek-1 qk, где qi – вершина, ei – дуга, началом которой является вершина qi, а концом – qi+1. Отметка пути l – это последовательность отметок w(l)=x1 y1 x2 y2yk-1 xk, где xi = µ(qi), yi = ρ(ei).

Пусть Pre(qi) – множество начальных вершин всех дуг, входящих в qi; Post(qi) – множество конечных вершин всех дуг, исходящих из qi. Весом пути между вершинами q0 и qk назовем  величину на рисунке 1.1.

Вес пути

Рисунок 1.1 – Формула веса пути

   Алгоритм


         Дан помеченный граф G с начальной и множеством финальных вершин.

Требуется построить отметку кратчайшего по весу пути.

Шаг 1. Создаем представление графа G в виде списка дуг с их отметками и весом, при этом отметки соответствующих вершин переносятся на дугу. Для неориентированных графов для каждого ребра между парой вершин qi и qj вводится две дуги: (qi,qj) и (qj,qi). В список вершин вводится фиктивная конечная вершина fin, а в список дуг – дуга из каждой финальной вершины qi в вершину fin. Эта дуга помечается отметкой µ(qi).

Шаг 2. If   в графе существует хоть одна петля или существуют вершины, не являющиеся начальными, из которых исходит хоть одна дуга,  then go to  Шаг 3

Else go to  Шаг 6.

Шаг 3. Удаление кратных дуг и петель

1. Удаляем все кратные дуги кроме одной из них с минимальным  весом dis.

2. Удаляем все петли, присутствующие в графе.

На шагах 4 – 5 происходит удаление одной вершины.

Шаг 4. Выбираем qi = Pre(fin);

q:= qi.

Шаг5. If q q0 then удаляем вершину q и все входящие и исходящие из нее дуги. Если при этом есть некоторый путь qj ei q e qk, где qj = Pre(q) и qk = Post(q), то в граф добавляется дуга (qj ,qk) c отметкой, полученной при помощи операции сочленения, описанной в [3];

dis(qj,qk)= dis(qj,q)+ dis(q,qk);  

go to Шаг 2;

else qi  равная q0 не исключается;

       выбираем qm = Pre(q0);

       q:= qm  go to Шаг 5.

Шаг 6. Удаляем все вершины, не равные q0 и fin и все входящие и исходящие из них дуги. Получим граф, состоящий только из двух вершин: начальной и fin, соединенных одной дугой c минимальным весом dis с отметкой кратчайшего пути в графе.

Доказано, что алгоритм корректен.

Данный алгоритм является модификацией алгоритма из [3], определяемой существом задачи. Модификация заключается в следующем.

1. При удалении кратных дуг оставляем дугу с минимальным весом, в то время как в [3] выполняется объединение двух языков.

2. Удаление петель происходит без использования операции зацикливания (итерации), поскольку в кратчайшем пути в графе петли не участвуют.

3. При удалении вершин дополнительно производится вычисление веса dis отметки пути, в то время как в [3] выполняется только конкатенация языков.

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

  Список использованной литературы

1.     Ахо А. Построение и анализ вычислительных алгоритмов / А. Ахо, Дж. Хопкрофт, Дж. Ульман. – М. : Мир, 1979. – 536 с.

2.  Хопкрофт Дж. Введение в теорию автоматов, языков и вычислений. 2-е издание / Дж. Хопкрофт, Р. Мотвани, Дж. Ульман. – М. : Издательский дом "Вильямс", 2002. – 528 с.

3.   Ногина Н.В. Анализ языков, порожденных помеченными графами. / Н.В. Ногина, И.С. Грунский  // Тезисы докладов международной научно-технической конференции «Системный анализ и информационные технологии» (SAIT 2012). – Киев, 2012. – в печати.