Алгоритм нахождения кратчайших маршрутов




ЛАБОРАТОРНАЯ РАБОТА №6

Маршруты и связность в неориентированных графах

 

 

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

Теоретическая справка

Виды маршрутов в неориентированных графах

 

Маршрут М=(v0,e1,v1,e2,…,en,vn) неориентированного графа G=(V,E) –чередующаяся конечная последовательность вершин и рёбер, начинающаяся и заканчивающаяся вершиной, каждое ребро соединяет две вершины – предыдущую и последующую.

Концевые вершины маршрута – v0 и vn, внутренние – все остальные вершины.

Замкнутый маршрут М = (v0,...,vn) – концевые вершины совпадают (v0=vn), иначе– открытый (v0 ¹vn).

Цепь – маршрут, все ребра которого различны.

Простая цепь – маршрут, все вершины которого, а следовательно и ребра, различны.

Цикл – замкнутая цепь, простой цикл – замкнутая простая цепь(маршрут, в котором ребра и вершины различны).

Обозначение: Cn простой цикл, n ³ 3, n – количество вершин.

Pn простая цепь, n – количество вершин.

 

C3 P5

       
 
   
 

 



Например:

Дан граф G. Привести примеры маршрута, цепи, простой цепи, замкнутого маршрута, цикла и простого цикла.

 
 

 


 

       
 
 
 
 
 

 

 


Маршрут M1=(1,3,4,5,3,4,6,7,2).

Маршрут M2=(1,3,4,5,3,4,6,7,1).

Маршрут M3=(1,5,3,7,1,2).

Маршрут M4=(1,7,3,4,6,7,1).

Маршрут M5=(1,5,3,4,6,7,2).

Маршрут M6=(1,3,4,6,7,2,1).

Для маршрута M1 вершины 1 и 2 концевые; 3,4,5,6,7 внутренние.

Маршрут M1 открытый, не цепь и не простая цепь (ребро (3,4) повторяется).

 

Маршрут M2 замкнутый, не цикл и не простой цикл (ребро (3,4) повторяется).

 

Маршрут M3 не простая цепь (вершина 1 повторяется).

 

Маршрут M4 не простой цикл (вершина 7 повторяется).

 

Маршрут M5 простаяцепь.

Маршрут M6 простой цикл.

 


Связность

Связный неориентированный граф G – любая пара вершин соединена маршрутом (простой цепью) в G.

Компонента связности или компонента графа G – максимальный связный подграф графа G.

 

Любой несвязный граф содержит по крайней мере две компоненты связности.  

 


 
 
Любой граф G является объединением своих компонент связности.


.

 

 

 
 
Либо граф, либо его дополнение связны.


À

 

 

Число вершинной связности χ(G) – наименьшее число вершин, удаление которых приводит к несвязному или одновершинному графу.

 

Число реберной связности l(G) – наименьшее число рёбер, удаление которых приводит к несвязному или одновершинному графу.

 

Точка сочленения (разделяющая вершина) – вершина v графа G, удаление которой увеличивает количество компонент связности графа G.

 

Мост – ребро, удаление которого приводит к увеличению числа компонент связности.

Неразделимый граф – граф без точек сочленения.

Блок – максимальный неразделимый подграф графа G.

 

 


 

Например:

 

Граф G: Граф R:

 

 

 

 

Граф G – связен.

Граф R – несвязен, в графе R три компоненты связности, R1 = {1,2,3}, R2 ={4}, R3={5,6,7}.

 

 

Граф G1:

 
 

 


Граф G1: точки сочленения – вершины a, b, c;

мост – ребро ab.

Граф G1 не является неразделимым;

блоки графа G1: {c,d,e},{c,b,f},{a,g,h,i},{a,b}.

 


 

 

Граф G2:

 

 
 

 


Вершинная связность графа G2 равна χ(G2) =1 (удаление вершины 5 приводит к нарушению связности графа G2).

Реберная связность графа G2 равна l(G2)=2 (удаление рёбер (5,7), (5,8) приводит к нарушению связности графа G2).

 

Метрика в неорграфах

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

 

Пусть в графе G маршрут М=(1,3,4,5,3,1,7), тогда его длина равна шести.

 

Обхват графа G – длина минимального простого цикла графа G (если он существует).

Окружение графа G – длина наибольшего простого цикла графа G (если он существует).

Расстояние d(u,v) между двумя несовпадающими вершинами u и v – длина кратчайшей простой цепи, соединяющей эти вершины.

Геодезическая s(u,v) – кратчайшая простая цепь между вершинами u и v,

доставляющая расстояние между этими вершинами.


Матрица расстояний

Матрица расстояний D(G) – квадратная матрица p*p, где p – количество вершин графа G.

D(G)=||dij|| i,j=1..p

0, если i=j;

dij = d(i,j), если i¹j, существует маршрут (i,j);

¥, если i¹j, не существует маршрут (i,j).

 

Эксцентриситет e(v) вершины v графа G – длина максимальной геодезической, исходящей из вершины v:

e(v)= MAX d(v,u).

uÎV

Диаметр D(G) графа G – максимальный среди всех эксцентриситетов вершин графа G:

D(G)= MAX e(v).

vÎV

Радиус R(G) графа G – минимальный среди всех эксцентриситетов вершин графа G:

R(G)= MIN e(v).

vÎV

Периферия графа G – множество вершин графа G, у которых эксцентриситет равен диаметру.

Центр графа G – множество всех вершин графа G, у которых эксцентриситетравен радиусу.

Например:

Граф G: вес каждого ребра равен 1.

 

Матрица расстояний DG

 

 
 
 
vj

vi

              e(vi)
1                
 
2

               
 
3

               
 
4

               
5                
 
6

               
                 

 

Диаметр G: D(G) =3.

Радиус G: R(G) =2.

Периферия графа G = {3,4}.

Центр графа G = {1,2,5,6,7}.

 

Обхват графа G = 3.

Окружение графа G = 7, максимальный простой цикл графа содержит все вершины графа G: ( 1,4,2,7,3,5,6,1 ).

 

 

Алгоритм нахождения кратчайших маршрутов

 

Задача о кратчайшем пути состоит в нахождении кратчайшего пути от заданной начальной вершины (s)до заданной конечной вершины (t), при условии,что такой путь существует.

Задачи данного типа имеют следующие модификации:

- для заданной начальной вершины s найти кратчайшие пути от s ко всем другим вершинам графа;

- найти кратчайшие пути между всеми парами вершин.

 

Для решения этих задач рассмотрим граф G=(X,Г), дуги которого имеют определенные веса (стоимости). Эти веся задаются матрицей C=[cij].

Элементы сij матрицы весов CG могут быть положительными, отрицательными или нулями. Поэтому существует ограничение: в G не должно быть циклов с суммарным отрицательным весом (в этом случае кратчайшего пути не существует). Отсюда также следует, что рёбра (неориентированные дуги) графа G не могут иметь отрицательные веса.

 

Описание ориентированного графа G состоит в задании множества вершин X и соответствия Г,которое показываеткак между собой связаны вершины (т.е. Г(xi) – множество вершин xj, для которых в графе существуют дуги (xi,xj), xj достижимы из xi с использованием путей длины 1). Соответствие Г называется отображением множества X в X, а граф в этом случае обозначается парой G=(X,Г).

Для графа G1 имеем Г(x1)={x3}

G1:

 

Будем рассматривать неориентированные ребра, как пары противоположно ориентированных (направленных) дуг с равными весами.

 

 

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

 

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

 

Рассмотрим этот алгоритм для случая, когда вес каждого ребра графа неотрицателен (cij ³ 0, ("i,j)).

 

Алгоритм:

Пусть l(xi) – отметка вершины хi.

 

Шаг 1. Положить l(s)=0+ и примем эту отметку постоянной. Положить l(xi)=∞ для всех хi¹s и считать эти отметки предварительными-«временными». Положить p=s.

 

Шаг 2. Для всех хi Г (р), отметки которых «временные», заменить отметки в соответствии со следующим выражением:

 

l(xi)← min [l(xi), l(p)+c(p,xi)]

 

Шаг 3. Среди всех вершин со временными отметками найти такую, для которой

l(xi­­­­*)= min [l(xi)]

 

Шаг 4. Считать отметку вершины хi* постоянной и положить р=хi*.

 

Шаг 5. Если p=t, то l(p) является длиной кратчайшего пути. Если p¹t, то перейти к шагу 2.

 

 

Как только длины кратчайших путей будут найдены, сами пути можно получить при помощи рекурсивной процедуры с использованием соотношения, т.к. вершина xi непосредственно предшествует вершине xi в кратчайшем пути от s к xi, то для любой вершины xi соответствующую вершину xi можно найти как одну из оставшихся вершин:

 

l(xi’)+c(xi’,xi)=l(xi)

Например:

Граф G:

Таблица 1. Матрица весов дуг - C(xi,x j) для графа G,

 

               
               
               
               
               
               
               
               

 

Допустим, что требуется найти все кратчайшие пути от вершины х1 ко всем остальным вершинам.

 

Постоянные отметки будем отмечать знаком +, остальные отметки рассматриваются пока - как «временные».

s – вершина начала пути. Для нашего примера s=x1.

l(xi) – пометка вершины хi (равная длине пути от вершины s до xi).

p – переменная, которая хранит имя вершины с постоянной отметкой.

t – конечная вершина кратчайшего пути от х1.

Г(р) – множество вершин, инцидентных x1 (т.е. вершин xj, для которых существуют дуги (xi, xj)).

C=[cij] – матрица весов.

 

Шаг1. p=х1 р – рабочая переменная, которая задает номер/имя вершины начала искомого пути минимальной длины. В данном примере выбрана первой в составе кратчайшего маршрута вершина х1.

Зададим первое приближение длины пути от х1 до всех остальных вершин графа.

l(х1)=0+ Отмечаем знаком 0+ нулевую отметку - l(х1 ) начала минимального пути из х1 в х1, его длина всегда равна нулю.

l(х2)=l(х3)=...=l(х7)=∞ Устанавливаем знаком ∞ отметки о неизвестной пока длине пути из х1 в вершины (х2 - х7)

 

Делаем Первую итерацию (уточнение расстояния каждой xj от вершины указанной в р. На этом этапе расчета р=х1.

 

Шаг2.

Г(р)=Г(х1)={х3, х5, х6, х7} – строим вектор вершин смежных вершине указанной в р. Пока р=х1.

Обновим «временные» отметки для всех вершин вектора Г(х1) по формуле: l(xi)← min [l(xi), l(p)+c(p,xi)].

Здесь l(xi):= min [l(xi), l(p)+c(p,xi)] для всех вершин.

l(3)=min(∞,0+4)=4

l(5)= min(∞,0+15)=15

l(6)= min(∞,0+13)=13

l(7)= min(∞,0+1)=1

min(∞,∞,4,15,13,1)=1, это вершина х7.

 

 
 
Отметка вершины х7 становится постоянной, со значением - l(7)=1+, поэтому задаем p=7 и начинаем новую итерацию  

 

 


3) l(2)=min(∞, 1++7)=8

l(3)= min(4, 1++2)=3

l(4)= min(∞, 1++∞)=∞

l(5)= min(15, 1++11)=12

l(6)= min(13, 1++12)=12

min(∞,3,8,9,13)=3

l(3)=3+

p=3


 

5)l(2)= min(8, 3++∞)=8

l(4)= min(∞, 3++9)=12

l(5)= min(12, 3++12)=12

l(6)= min(13, 3++13)=12

l(2)=8+

p=2

 

 

6) l(4)= min(12, 8++4)=12

l(5)= min(12, 8++∞)=12

l(6)= min(13, 8++5)=13

l(4)=l(5)=12+

p=4, 5

 

7) l(6)= min(13,12++∞)=13

l(6)=13+

p=6

Расчет закончен.

 

Таким образом кратчайшие маршруты от вершины 1:

 

1-2=(1,7,2)=8;

 
 


1-3=(1,7,3)=3;

1-4=(1,7,3,4)=(1,7,2,4)=12;

 
 


1-5=(1,7,5)=12;

 
 


1-6=(1,6)=(1,7,6)=(1,7,2,6)=13;

       
 
 
   
 


 
1-7=(1,7)=1;

               
   
 
     
 
 
 
   
 
 

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-02-10 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: