Материал: Diskretnaya_matematika

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Составление цикломатической матрицы

где

Составление матрицы разрезов

где

Замечание.Символобозначает операцию сложения по модулю 2. Результат этой операции равен 0, если арифметическая сумма чисел есть четное число, и равен 1–в противном случае.

Цикломатическая матрица Cи матрица разрезовSявля­ются ортогональными, что математически выражается матричным уравнением:CST=. ЗдесьST– транспони­рованная матрицаS, а– нулевая матрица.

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

3.8. Задача определения путей в графах

3.8.1. Определение путей в графе

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

Граф G(X) с двумя отмеченными вершинамиxi,xjназы­вается (xi,xj) – плоским, если графG(X)=G(X)(xi,xj), полученный до­бавлением кG(X) ребра (xi,xj), является плоским.

Рассмотрим алгоритм определения пути, ведущего из вершины xiвxjплоского графа. Еслиxiне является вершиной никакого про­стого цикла, то при определении алгоритма пути изxiвxjв графеG(X) всегда выбирается самый левый или правый коридор (ребро) (рис. 3.33).

–путь при выборе левого коридора;

–путь при выборе правого коридора.

Аналогичный алгоритм определения пути в прадереве предпо­лагает следующие действия. Из корня идти по какой-либо ветви насколько возможно далеко, затем возвратиться на какой-нибудь перекресток и отправиться по новому направлению (еще не прой­денному) и т.д. Искомый путь из xiвxjбудет состоять из всех тех ребер, которые в процессе поиска были пройдены по одному разу.

При определении пути в произвольном графе, не являющемся прадеревом, приходим к предыдущему случаю следующим образом. Если, пройдя по некоторому ребру g, попадаем на уже пройденный ранее перекресток х, то реброg«отсекается» от одной из своих концевых точек. После отсечения ребра, пройденные хотя бы один раз, образуют прадерево.

Рис. 3.33. Определение пути в графе

При определении пути в графе с помощью алгоритма Тарринеобходимо в данном алгоритме пользоваться правилом:

а) не проходить дважды по одному ребру в одном и том же направлении;

б) находясь в вершине х, не выбирать того ребра, которое при­вело в данную вершину в первый раз (если есть возмож­ность друго­го выбора).

3.8.2. Алгоритм определения кратчайших путей

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

Рассмотрим задачу о кратчайшем пути. Пусть дан графG(X), ду­гам которого приписаны веса (расстояния, стоимости и т.п.), задаваемые матрицей С = ||cij||.

Задача о кратчайшем пути состоит в нахож­дении кратчайшего пути от заданной начальной вершины sXдо заданной конечной вершиныt Xпри условии, что такой путь су­ществует. В общем случае возможно Сij> 0, Сij < 0, Сij= 0. Единст­венное ограничение состоит в том, чтобы в графеG(X)не было цикловс отрицательным суммарным весом.

Приведем очень простой и эффективный алгоритм Дейкстрырешения этой задачи для случая Сij0i,j. Алгоритм основан на приписывании вершинам временных пометок, причем пометка вер­шины дает верхнюю границу длины пути отsк этой вершине. Вели­чины этих пометок постепенно уменьшаются с помощью некоторой итерационной процедуры, и на каждом шаге итерации точно одна из временных пометок становится постоянной. Это означает, что по­метка уже не является верхней границей, а дает точную длину крат­чайшего пути отsк рассматриваемой вершине. Пустьl(xi) – пометка вершиныxi. Опишем основные этапы алгоритма.

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

Шаг 1. Присвоение начальных значений. Для исход­ной вершиныsположимl(s) = 0 и эта пометка будет по­сто­янной. Для всех других вершин имеем: 1(хi) =xis. Эти пометки временные. Положимp=sи составим мно­жество образов этой вершины:G(p).

Шаг 2. Обновление пометок. Для всехxiG(p), помет­ки которых являются времен­ными, изменить пометки в соответствии с выражением:

1(хi) = min [1(хi), 1(р) + c(p, xi)] (8)

Шаг 3. Превращение пометок в постоянные. Среди всех вершин с временными пометками найти та­куюxi*, для которойl(xi*) =min[l(xi)]. Считать пометку вершиныxi*постоянной и положить р =xi*.

Шаг 4. Переход к шагу 2, если р t. Останов при р = t. В случае, если требуется найти лишь путь от s к одной вершине t, следует окончание счета. Длина этого крат­чайшего пути будет 1(р).

При необходимости нахождения путей от sко всем остальным вершинам графа переходим к шагу 2. Продолжаем вычисления, пока все вершины не получат по­стоянные пометки. Эти отметки и дают длины кратчайших путей отsк этим вершинам.

Проиллюстрируем работу алгоритма на примере графа, изо­браженного на рис. 3.34. Матрица весов – в табл. 3.4. Граф является смешанным, т. е. ребра у него ориентирова-нные и неори­ентированные. Требуется найти все кратчайшие пути от x1ко всем остальным вершинам. Постоянные пометки будем обозначать знаком+.

Шаг 1.l(x1) = 0+, 1(xi) =xix1, р =x1.

Первая итерация

Шаг 2.G(p) =G(x1) = {х2, х7, х8, х9}. Все эти вершины имеют временные пометки.

Рис.3.34. Пример графа к алгоритму Дейкстры

Таблица 3.4. Матрица смежности с весами для графа

х1

х2

х3

х4

x5

x6

x7

x8

x9

х1

10

3

6

12

х2

10

18

2

13

х3

18

25

20

7

х4

25

5

16

4

x5

5

10

x6

20

10

14

15

9

x7

2

4

14

24

x8

6

23

15

5

x9

12

13

9

24

5

В соответствии с формулой (8) уточняем пометки:

l(х2) = min(, 0+ + 10) = 10; l(х7) = 3; l(х8) = 6; l(x9) = 12.

Шаг 3.min(10, 3, 6, 12,) = 3

х2 х7 х8 х9 х3, х4, х5, х6

Вершина х7 получает постоянную пометку: 1(х7) = З+ .

Далее р = x7.

Шаг 4. Так как не все вершины имеют постоянные пометки, то переходим к шагу 2. На рис. 3.35 приведены значения пометок вершин графа. Здесь выделены вершины с постоянными пометками.

Рис. 3.35. Пометки в начале второй итерации

Вторая итерация

Шаг 2.G(p) =G(x7) = {х2, х4, хб, х9}.Пометки всех этих вершин временные. Из (8) получим:l(х2) = 5,l(х4) = 7,l(х6)=17,l(х9) = 12.

Шаг 3.min(5, 7, 17, 6, 12,) = 5.

х2 х4 х6 х8 х9 х3, х5

Вершина х2 получает постоянную пометку 1(х2) = 5+.

Далее р = x2.

Шаг 4. Значения пометок приведены на рис. 3.36. Переходим к шагу 2.

Рис. 3.36. Пометки в начале третьей итерации

Третья итерация

Шаг 2.G(p) =G(x2) = {х1, х3, х7, х9}. Только вершины х3и х9 имеют временные пометки. Из (8) получим:l(х3) =min(,5++18) = 23, аналогично 1(х9) =12.

Шаг 3.min(23, 7, 17, 6, 12,) = 6,

х3 х4 х6 х8 х9 х5

Вершина х8 получает постоянную пометку 1(х8) = 6+, р=x8.

Шаг 4. Перейти к шагу 2 (рис. 3.37).

Рис. 3.37. Пометки в начале четвертой итерации

Продолжая итерационный процесс, получим в итоге постоян­ные пометки для всех вершин графа (рис.3.38) и кратчайшие пути от вершины х1ко всем остальным вершинам. Эти пути выделены жирными линиями.

Для нахождения кратчайшего пути между вершиной х2и на­чальной вершинойх1последовательно используем соотношениеl(хi) + С(хi, хi) =l(хi). Полагаяi= 2 находим вершину х2', непосред­ственно предшествующей х2в кратчайшем пути от х1к х2:

1(х2') + С(х2', х2) =l(х2) = 5. Этому соотношению удов­ле­­творяет вершина х7. Следовательно, х2' = х7. Полагаяi= 7 и применяя соот­ношение еще раз, получим х7' = х1Поэтому кратчайший путь со­стоит из вершин х1, х7, х2. Аналогичным образом находим все крат­чайшие пути от х1к остальным вершинам.

Рис. 3.38. Пометки и кратчайшие пути в графе

3.9. Обход графа

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

Источник: https://files.student-it.ru/previewfile/281811