
1-й сем-ДМ-слайды-ДГТУ / Графы-3,4 лекции / Маршруты
.docМаршруты, цепи и простые цепи.
Пусть G – неориентированный граф. Маршрут в G – конечная или бесконечная последовательность ребер S=(...E0, E1..,En...), в которой два соседних ребра Ei-1 и Ei имеют общую концевую точку, т. е. ...,E0=(A0, A1), E1=(A1, A2)...,En=(An, An+1)... Одно и тоже ребро E может встречаться в маршруте несколько раз.
A0 – начальная вершина – нет ребер перед ней; А3 –
конечная вершина – нет ребер после нее!
Любая вершина, принадлежащая двум соседним ребрам Ei-1 и Ei, называется внутренней или промежуточной вершиной. Так как ребра и вершины в маршруте могут повторяться, внутренняя вершина может оказаться начальной или конечной вершиной. Маршрут называется нетривиальным, если он содержит хотя бы одно ребро; маршрут не содержащий никаких ребер, называется нуль – маршрутом.
Если маршрут S имеет начальную вершину A0 и конечную вершину An, то
S=S(A0, An), A0 и An – концевые точки или концы маршрута S. Говорят, что S – маршрут длины n, соединяющий A0 и An. Если А0=Аn, то маршрут называется циклическим.
Для двух вершин маршрута Ai и Aj подмаршрут S(Ai, Aj)=(Ei, Ei+1,...,Ej-1) называется конечным участком S.
Маршрут называется цепью, а циклический маршрут – циклом, если каждое его ребро встречается в нем не более одного раза; вершины в цепи могут повторяться и несколько раз. Любой участок цепи есть цепь.
Нециклическая цепь называется простой цепью, если в ней никакая вершина не повторяется. Цикл с концом А0 называется простым циклом, если А0 не является в нем промежуточной вершиной и никакие другие вершины не повторяются. Участок простой цепи (цикла) – простая цепь (цикл). Для ориентированного графа можно вводить как неориентированные маршруты, цепи и простые цепи, не принимая во внимание ориентации ребер, так и ориентированные маршруты, цепи, простые цепи, в которых все ребра проходятся в направлении их ориентации. Ориентированную цепь называют путем, ориентированный цикл – контуром.
Граф G называется связным, если для любых двух его вершин V и W существует простая цепь из V в W.
Любой граф можно разбить на непересекающиеся связные подграфы, называемые компонентами (связности), задав отношение эквивалентности на множестве его вершин: две вершины эквивалентны (или связны), если существует простая цепь из одной в другую. Связный граф состоит из одной компоненты. Граф несвязный, если число его компонент больше единицы.
Если имеем граф с n вершинами, заданным числом компонент. Если граф связан, то число ребер в нем минимально, когда он не имеет циклов (такой граф называется деревом) и максимальным, когда он – полный граф. Число ребер в таком графе m:
;
Теорема: Пусть G –
простой граф с n вершинами
и k компонентами. Тогда
число m его ребер:
Доказательство: неравенство
докажем
индукцией по числу ребер в G.
Если G – вполне несвязный
граф, то утверждение очевидно
.
Если в графе G число ребер
минимально (M0), то
удаление любого ребра должно привести
к увеличению числа компонент на единицу.
Таким образом, в получившемся графе
будет m вершин, k+1
компонент и M0-1
ребер. Следовательно, в силу индуктивного
предположения
,
откуда получается
,
что и утверждалось.
Для доказательства оценки сверху считаем
каждую компоненту графа G
полным графом. Пусть Сi
и Cj
– две компоненты соответственно с ni
и nj
вершинами и
>1
Если мы заменим Сi
и Сj на полные графы
с
и
вершинами, то общее число вершин не
изменится, а число ребер увеличится на
положительную величину:
Следовательно, для того, чтобы число ребер в G было максимально возможным (при заданных n и k), G должен состоять из k-1 изолированных вершин и сложного графа с n-k+1 вершинами, что и требовалось доказать.
Следствие: Любой простой граф с n
вершинами и более, чем
ребрами связан.
Насколько же сильно связен связный
граф? Т.е. сколько ребер нужно удалить
из графа, чтобы он перестал быть связным?
Разделяющее множество связного графа
G – множество его ребер,
удаление которого приводит к неверному
графу. Например, в графе каждое из
множеств
и
являемое разделяющим; неверный граф,
оставшийся после удаления второго из
этих множеств, имеет вид:
l3
l5 l6 l4 l4
l1 l1 l5
l7
l2 l8 l2
Назовем разрезом такое разделяющее множество, никакое собственное подмножество которого не является разделяющим.
Разрезом является множество
.
После удаления ребер, принадлежащих
разрезу, остается граф имеющий ровно
2 компоненты. Если разрез состоит из 1
ребра l, то l
называется мостом или перешейком.
В произвольном графе G, разделяющее множество – множество ребер, удаление которого увеличивает число компонент в G. Разрез в G – разделяющее множество, никакое собственное подмножество которого не является разделяющим.
мост
l
Теорема: Если в конечном графе G ровно две вершины a0 и b0 имеют нечетную локальную степень, то они связаны.
Доказательство: Каждый конечный
граф имеет четное число вершин, нечетной
степени. Так как это условие выполняется
и для этой компоненты G,
которой принадлежит a0,
то b0 должно
принадлежать той же компоненте.Кроме
того, a0 и b0
должны остаться связными в графе
,
полученном из G удалением
части H, которой все
локальные степени четные .
Теорема: Если граф G
с однократными ребрами и без петель
имеет n вершин и k
связных компонент, то максимальное
число ребер в G равно
(2)
Доказательство: Пусть в графе G
компонента Gi
имеет Ni
вершин. Тогда максимальное число
ребер в G равно..Это
число достигается тогда, когда каждый
из графов Gi
полный и имеет ni
вершин. Допустим ,что среди графов Gi
найдутся хотя бы 2, которые имеют более
одной вершины, например
.
Построим вместо G другой
граф
с
тем же числом вершин и компонент, заменяя
и
полным
графом
и
соответственно
с
и
вершинами. Это увеличивает число ребер.
Итак максимальное число ребер должен
иметь граф, состоящий из k-1
изолированных вершин и одного полного
графа с n-k+1
вершинами. Его число ребер описывается
формулой (2). Для случая k>2
имеем: граф с n вершинами
и с числом ребер, больше чем
связан.
Можно учитывать и пропускные способности и надежности дуг.
Кратчайший путь между двумя заданными вершинами s и t.
Рассмотрим случай
Алгоритм Дейкстры. Он основан на приписывании вершинам временных пометок, причем пометка вершины дает верхнюю границу длины пути от s к этой вершине. Эти пометки (их величины) постепенно изменяются с помощью некоторой итерационной процедуры, и на каждом шаге итерации точно одна из временных пометок становится постоянной. Это указывает на то, что пометка уже не является верхней границей, а дает точную длину кратчайшего пути от s к рассматриваемой вершине.
Пусть
- пометка вершины
.
Присвоение начальных значений.
Шаг 1. Положить
и считать эту пометку постоянной.
Положить
для всех
и считать эти пометки временными.
Положить p=s.
Обновление пометок.
Шаг 2. Для всех
,
пометки которых временные, изменить
пометки в соответствии со следующим
выражением:
.
Превращение пометки в постоянную .
Шаг 3. Среди всех вершин с временными
пометками найти такую, для которой
Шаг 4. Считать пометку вершины
постоянной и положить
.
Шаг 5. a) (Если нужно найти
лишь путь от s к t).
Если p=t, то
- длина кратчайшего пути. Остановка.
Если
,
перейти к шагу 2.
b) (Если требуется найти пути от s ко всем остальным вершинам).
Если все вершины отмечены как постоянные, то эти пометки дают длины кратчайших путей. Остановка.
Если некоторые пометки являются временными, перейти к шагу 2.
Доказательство.
Допустим, что на некотором этапе
постоянные пометки дают длины кратчайших
путей. Пусть
- множество вершин с этими пометками, а
- множество вершин с временными пометками.
В конце шага 2 каждой итерации временная
пометка
дает
кратчайший путь от s к
,
проходящий полностью по вершинам
множества
.
Так как при каждой итерации в множество
включается только одна вершина, то
обновление пометки
требует
только одного сравнения на шаге 2. Пусть
кратчайший путь от s к
не проходит целиком по
и содержит по крайней мере одну вершину
из
,
и пусть
- первая такая вершина в этом пути. Так
как
,
то часть пути от
к
должна иметь не отрицательный вес
и
.
Это, однако, противоречит утверждению,
что
- наименьшая временная пометка, и,
следовательно, кратчайший путь к
проходит полностью по вершинам множества
,
и поэтому
является его длиной. Так как множество
равно
и при каждой итерации к
добавляется
,
то предположение, что
равно
длине кратчайшего пути
,
выполняется при каждой итерации. Отсюда
по индукции следует, что алгоритм дает
оптимальный ответ.
Если требуется найти кратчайшие пути
между s и всеми другими
вершинами полного связного графа с n
вершинами то в процессе работы алгоритма
выполняется
операций сложения и сравнения на шаге
2 и еще
операций сравнения на шаге 3.
Кроме того, при осуществлении шагов 2 и
3 необходимо определить, какие вершины
являются временными, а для этого нужно
еще
операций сравнения. Эти величины являются
верхними границами для числа операций,
необходимых при отношении кратчайшего
пути между заданными вершинами s
и t. Они действительно
достигаются, если окажется, что вершина
t будет последней вершиной,
получившей постоянную пометку.
Как только длины кратчайших путей от s
будут найдены (они будут заключительными
значениями пометок вершин), сами пути
можно получить при помощи рекурсивной
процедуры:
.
Так как вершина
непосредственно предшествует вершине
в кратчайшем пути от s к
,
то для любой вершины
соответствующую вершину
можно
найти как одну из оставшихся вершин,
для которой имеем
.
Если кратчайший путь от S
до
является единственным, то дуги
этого
кратчайшего пути .Если существует
немного кратчайших путей от S
к какой – либо другой вершине то при
некоторой фиксированной вершине
(2) будет выполнено для более чем одной
вершины
.
В этом случае выбор может быть, либо
произвольным (если нужен какой-то 1
кратчайший путь между s
и
),
либо таким что рассматриваются все дуги
,
входящие в какой-либо из кратчайших
путей, и при этом ? всех таких дуг образует
неориентированное дерево, а общий граф,
называемый базой относительно S
или кратко S-базой.
Пример.
Рассмотрим граф G где каждое неориентированное ребро рассматривается как пара противоположно ориентированных дуг равного веса.
Матрица
Решаем алгоритм Дейкстры.
Постоянные пометки снабжаем знаком +, остальные пометки временные.
Алгоритм работает так:
Шаг 1.
,
.
Первая итерация.
Шаг 2.
- все пометки временные. Возьмем
из
:
;
;
Шаг 3.
соответствует
Шаг 4.
получает
постоянную пометку
Шаг 5. Не все вершины имеют постоянные пометки, поэтому переходим к шагу 2. Пометки в ? покажем в графе:
рис.1
Вторая итерация.
Шаг 2.
- все пометки временные. Из ? имеем:
;
;
;
Получим ? рис.1
Шаг 3.
соответствует
Шаг 4.
получает
постоянную пометку
Шаг 5. Перейти к шагу 2.
Третья итерация.
Шаг 2.
-
точно вершины
и
имеют
временные пометки; из соотношения
получаем:
и аналогично
Шаг 3.
соответствует
Шаг 4.
получает
постоянную пометку
Шаг 5. Перейти к шагу 2.
Продолжая этот процесс, получим:
Для нахождения кратчайшего пути между
вершиной
(например) и начальной вершиной
мы
последовательно используем соотношение
.
Таким образом, ??
,
находим вершину
,
непосредственно предшествующую
в
кратчайшем пути от
к
:
вершина
должна
удовлетворять соотношению:
.
Единственной такой вершиной является
.
Далее применяя
,
беря
получаем вершину
,
непосредственно предшествующую
в кратчайшем пути от
к
.
Вершина
удовлетворяет:
.
Единственная такая вершина
поэтому кратчайший путь от
к
есть
.
- база, дающая все кратчайшие пути от
дерево,
изображенное жирными линиями.
Кратчайшие пути в графе.
Пусть дан граф G=(X,Г),
дугам которого приписаны веса (стоимости),
задаваемые матрицей
.
Задача о кратчайшем пути – нахождение
кратчайшего пути от заданной от заданной
начальной вершины
до
заданной конечной вершины
,
при условии, что такой путь существует,
т.е. при условии
.
- множество, достижимое из вершины S.
Элементы
матрицы C могут быть >0,
<0, =0. Единственное ограничение – в G
??циклов с ?? отрицательным весом. Если
такой цикл Ф и
- его вершина, то двигаясь от S
к
,
обходя затем Ф достаточно большое число
раз и попадая наконец в t,
получая путь со сколь угодно малым
весом. Таким образом, в этом случае
кратчайшего пути не существует.
Если такие длины существуют , но
исключаются из рассмотрения, то нахождение
кратчайшего пути (простой цепи) между
s и t
эквивалентно нахождению в этом графе
кратчайшего гамильтонова пути с
концевыми вершинами s и
t. Это видно из следующей
???. Если из каждого элемента
матрицы
весов С вычесть достаточно большое
число L, то получается
новая матрица весов
,
все элементы которой
отрицательны.
Тогда кратчайший путь от s
к t – с исключением
отрицательных циклов – необходимо
будет ???
Так как вес любого гамильтонова пути с
матрицей С, но уменьшенному на постоянную
величину (n-1)L
, то кратчайший путь (простая цепь) от s
к t с матрицей
будет кратчайшим гамильтоновым путем
??? s к t при
первоначальной матрице С. Задача
нахождения кратчайшего гамильтонова
пути намного сложнее чем задача о
кратчайшем пути. Поэтому будем
предполагать, что все длины в G
имеют неотрицательный суммарный вес.
Отсюда следует, что неориентированные
дуги (ребра) графа G не
могут иметь отрицательного веса.
Возникает следующая задача:
-
Для заданной начальной вершины S найти кратчайшие пути между S и всеми другими вершинами
-
Найти кратчайшие пути между всеми парами вершин.
Матрица весов не удовлетворяет условию
треугольников, т.е., не обязательно
для всех i, j
и k. В противном случае
кратчайший путь между
и x состоит из одной
единственной дуги
(если
она существует) и задача становится
тривиальной. Если в графе G
дуга
отсутствует, то ее вес покажется равным
.
На практике требуется найти не только кратчайший путь, но второй третий и т.д. подкратчайшие пути.