Методичка по лабораторной работе №4 [новая]
.docТеория принятия решения
Лабораторная работа №4
Тема: Сетевые модели.
Цель работы
Знакомство с задачами , использующими сетевые модели представления, изучение различных методов решения в системе компьютерной математики.
Краткие теоретические сведения
Основные понятия теории графов
Граф G—это совокупность двух конечных множеств: множества точек, которые называются вершинами, и множества пар вершин, которые называются ребрами.
На рис. 1.1 изображен граф, имеющий пять вершин и шесть ребер.
Если рассматривается множество упорядоченных пар точек, т. е. на каждом ребре задается направление, то граф G называется ориентированным. В противном случае G называется неориентированным графом.
Ребра, имеющие одинаковые концевые вершины, называются параллельными.
Ребро, концевые вершины которого совпадают, называется петлей. На рис. 11.1и – параллельные ребра, а – петля.
Вершина и ребро называются инцидентными друг другу, если вершина является для этого ребра концевой точкой. На рис. 11.1 вершинаи ребро инцидентны друг другу.
Две вершины, являющиеся концевыми для некоторого ребра, называются смежными вершинами. Два ребра, инцидентные одной и той же вершине, называются смежными ребрами. На рис. 1.1 – смежные вершины, – смежные ребра,
Степенью вершины называется число ребер, инцидентных ей. Вершина степени 1 называется висячей. Вершина степени 0 называется изолированной. На рис. 1.1 степень вершины равна трем, – висячая вершина, – изолированная.
Граф G называется полным, если любые две его различные вершины соединены ребром и он не содержит параллельных ребер.
Дополнением графа G называется граф с теми же вершинами, что и граф G, и содержащий только те ребра, которые нужно добавить к графу G, чтобы получился полный граф. На рис. 1.2 изображены следующие графы: G1 –полный граф с пятью вершинами, G2 – некоторый граф, имеющий пять вершин, – дополнение графа G2.
Путем в графе называется такая последовательность ребер, ведущая от некоторой начальной вершины p1 в конечную вершину pn, в которой каждые два соседних ребра имеют общую вершину и никакое ребро не встречается более одного раза. Например, в графе, изображенном на рис, 1.1, последовательность реберобразует путь, ведущий от вершины p1 к вершине р4.
Циклом называется путь, начальная и конечная вершины которого совпадают. На рис. 11.1 ребра образуют цикл.
Цикл графа G называется простым, если он не проходит ни через одну вершину G более одного раза.
Длиной пути или цикла называется число ребер этого пути или цикла.
Связные графы
Граф G называется связным, если для любых двух его вершин существует путь, их соединяющий. В противном случае граф G называется несвязным.
Любой несвязный граф является совокупностью связных графов. Эти графы обладают тем свойством, что никакая вершина одного из них не связана путем ни с какой вершиной другого. Каждый из этих графов называется компонентой графа G. На рис. 1.3 изображен несвязный граф G с компонентами G1,G2,G3. Каждая компонента является связным графом.
Деревья и лела
Связный граф, не содержащий циклов, называется деревом.
Деревом некоторого графа G называется его связный подграф без циклов. Дерево графа G, содержащее все его вершины, называется остовом графа G или его покрывающим деревом.
Кодеревом T* остова Т графа G называется такой подграф G', который содержит все его вершины и только те ребра, которые не входят в T.
Ребра остова Т называются ветвями графа G, а ребра кодерева – Т* –связями.
Граф, не содержащий циклов и состоящий из k компонент, называется к-деревом; к-дерево графа G, содержащее все его вершины, называется остовным.
Подграф G, содержащий все его вершины и только те ребра, которые не входят в остовное k-дерево Т графа G, называется k-кодеревом Т*.
Если граф G содержит k компонент, то его остовное k-дерево Т называется лесом, а k-кодерево Т* в этом случае называется КО-лесом.
Рангом графа G, имеющего n вершин и состоящего из k компонент, называется число r(G) = n - k.
Цикломатическим числом графа называется число где m –число ребер графа G.
Очевидно, что ранг и цикломатическое число связаны следующим соотношением:
Эйлеровы и гамильтоновы графы
Эйлеровым путем (циклом) графа называется путь (цикл), содержащий все ребра графа ровно один раз.
Граф, обладающий эйлеровым циклом, называется эйлеровым графом.
На рис. 1.9 граф G не является эйлеровым, так как вершина р3 инцидентна только одному ребру.
Если путь приведет в вершину p3 то не будет ребра, по которому можно было бы выйти из p3.
Граф G, изображенный на рис. 1.10, является эйлеровым. Последовательность ребер, образует эйлеров цикл.
На рис. 1.9 изображен граф G, обладающий эйлеровым путем с концевыми вершинами p5 и p3.
Гамильтоновым путем (циклом) графа G называется путь (цикл), проходящий через каждую вершину G в точности по одному разу
Граф, обладающий гамильтоновым циклом, называется гамильтоновым.
Критерий существования гамильтонова цикла в произвольном графе G еще не найден. Достаточным условием существования гамильтонова цикла является полнота графа G.
Граф, изображенный на рис. 1.9, не является гамильтоновым, а граф, представленный на рис. 1.11, содержит гамильтонов цикл
Ориентированные графы
В ориентированных графах на ребрах задано направление, т. е. у каждого ребра фиксируются начало и конец. Такие направленные ребра называются дугами.
Цепью в ориентированном графе называется такая последовательность дуг, ведущих от вершины p1 к вершине pn, в которой каждые две соседних дуги имеют общую вершину и никакая дуга не встречается более одного раза. Если направление цепи совпадает с направлением всех принадлежащих ей дуг, то цепь называется путем.
В ориентированных графах циклом называется путь, начало и конец которого совпадают. На рис. 1.12 дуги образуют цепь, а дуги − путь. Последовательность дуг составляет цикл, а последовательность не является циклом.
Цепь, путь, цикл в произвольном графе G называются простыми, если они не проходят ни через одну свою вершину более одного раза. Длиной цепи, пути, цикла называется число содержащихся в них дуг.
Сетью называется граф, каждой дуге которого поставлено в соответствие некоторое число (или несколько чисел).
Многие практические задачи могут быть решены е помощью теории графов. Рассмотрим некоторые примеры.
Задача размещения. В некотором районе имеется п населенных пунктов, соединенных друг с другом сетью шоссейных дорог. Нужно построить станцию технического обслуживания автомобилей вблизи шоссейной дороги. Расположение станции должно быть удобно для жителей всех населенных пунктов. Например, можно потребовать, чтобы сумма расстояний от станции до населенных пунктов была минимальной.
Легко представить эту задачу с помощью графа. Населенные пункты представляются вершинами графа, а шоссейные дороги – дугами, которые их соединяют. Станция технического обслуживания должна быть расположена на одной из дуг графа.
Задача почтальона. Почтальон ежедневно забирает письма на почте, разносит их адресатам, располагающимся вдоль всего маршрута его следования, и возвращается обратно на почту. Путь, пройденный почтальоном, должен быть как можно короче.
Улицы представляются дугами некоторого графа. Задача почтальона заключается в том, чтобы найти марш» рут обхода всех дуг графа минимальной длины.
Задача строительства дорог. Имеется п городов, которые нужно соединить между собой новыми дорогами (не обязательно каждые два города должны быть связаны друг с другом непосредственно). Известна стоимость прокладки дороги между любыми двумя городами. Требуется составить проект строительства дорог минимальной стоимости.
Очевидно, что каждый город представляется вершиной графа, а дорога –дугой, соединяющей вершины. Каждой дуге ставится в соответствие число, равное стоимости строительства соответствующей дороги. Требуется построить некоторое «покрытие» графа минимальной стоимости.
Матрицы графов
Граф может быть задан разными способами: рисунком, перечислением вершин и ребер (или дуг) и т. д. Одним из самых удобных способов является задание графа с помощью матрицы. Пусть некоторый граф G имеет n вершин p1, p2, ..., pn и m ребер α1, α2, ..., αm.
Построим матрицу, имеющую n строк и m столбцов. Каждая строка матрицы будет соответствовать вершине, а столбец – ребру графа. В столбце α j все элементы, кроме двух, будут равны нулю. Для ориентированного графа в строке, соответствующей начальной вершине дуги αj, ставят число +1, а в строке, соответствующей конечной вершине, – число -1. Для неориентированного графа в строчках матрицы, соответствующих концевым вершинам ребра αj ставят 1, а в остальных строчках – 0. Для графов, изображенных на рис. 1.12 и 1.9, матрицы имеют соответственно следующий вид:
|
α1 |
α2 |
α3 |
α4 |
α5 |
|
|
α1 |
α2 |
α3 |
α4 |
α5 |
α6 |
p1 |
1 |
0 |
-1 |
1 |
0 |
|
p1 |
1 |
1 |
0 |
0 |
0 |
0 |
p2 |
-1 |
1 |
0 |
0 |
0 |
|
p2 |
0 |
1 |
1 |
0 |
1 |
1 |
p3 |
0 |
-1 |
1 |
-1 |
1 |
|
p3 |
0 |
0 |
0 |
0 |
0 |
1 |
p4 |
0 |
0 |
0 |
0 |
-1 |
|
p4 |
0 |
0 |
0 |
1 |
1 |
0 |
|
|
|
|
|
|
|
p5 |
1 |
0 |
1 |
1 |
0 |
0 |
Построенные матрицы называются матрицами инциденций графа.
Матричное представление графа является наиболее удобной формой задания графа при вычислениях на машине.
Максимальные потоки в сети
Поток на графе – это совокупность однородных объектов, пересылаемых из одной вершины в другую по его дугам. Если вершины р и q соединены дугой α=(p, q) то поток из р в q обозначается f(p, q). Таким образом, поток – некоторая функция, заданная на дугах графа.
Пусть имеется ориентированный граф, на дугах которого определена функция С(р, q). В потоковых задачах С(р, q) обычно означает пропускную способность дуги (р, q) или стоимость перевозки единицы потока по этой дуге.
Дивергенцией потока f в вершине р называется разность выходящих и входящих потоков:
где A(p) – множество дуг, выходящих из вершины р, а B(p) – множество входящих в нее дуг.
Вершины, в которых , называются источниками потока f, а вершины, в которых − его стоками.
Сложим дивергенцию потока f во всех вершинах графа. Очевидно, что
Пусть задана сеть; в которой выделены две вершины s и t. Рассмотрим такие потоки f(α), что:
1) на всех дугах ;
2) при всех p, кроме, быть может, p = s и p = t.
Вершины s и t называются полюсами сети, а остальные вершины называются внутренними.
Из предыдущего следует, что
Если M=0 , то поток называется циркуляцией. В противном случае M≠0 вершина s является источником потока, а вершина t – стоком. Число М > 0 называется мощностью потока f.
Задача состоит в том, чтобы найти поток f максимальной мощности, удовлетворяющий условиям 1 и 2.
Если рассматриваемая сеть G содержит параллельные дуги, то нужно рассмотреть новую сеть G' с теми же вершинами, что и G, в которой параллельные дуги α и β склеены. Пропускная способность полученной при этом дуги у есть . После получения решения f для сети G' оно разбивается на сумму где .
Нахождение увеличивающей цепи
Пусть заданы сеть G и какой-то поток f на этой сети. Дуги α, в которых , называются увеличивающими, так как поток через эти дуги можно увеличить на величину . Множество увеличивающих дуг обозначается .
Дуги α, в которых , называются уменьшающими, так как поток через эти дуги можно уменьшить на величину. Множество уменьшающих дуг обозначают
Заметим, что дуга а может принадлежать одновременно множествам и
Пример. Рассмотрим сеть, изображенную на рис. 1.13, и некоторый поток f. Возьмем цепь (s, p, r, m, n, t) соединяющую вершины s и t. Вдоль этой цепи можно увеличить поток на минимальную из величин
Очевидно, что мощность потока возрастет на 1 (рис. 1.14).
В общем случае вдоль некоторой цепи, соединяющей вершины s и t, можно увеличить поток, если ее прямые дуги – увеличивающие, а все обратные – уменьшающие.
Максимальный дополнительный поток δ, который можно переслать вдоль такой цепи, равен минимуму из всех для прямых дуг а и всех для обратных дуг .
Алгоритм нахождения увеличивающей цепи
1. Находят множество дуг и .
2. Отмечают вершину s (источник).
3. Далее отмечают некоторые дуги и вершины сети G. Именно: если вершина р отмечена, а вершина q – нет и дуга , то отмечают дугу α и вершину q. Если вершина р отмечена, а вершина q не отмечена и дуга , то отмечают дугу а и вершину q.
В результате получают некоторое подмножество отмеченных вершин, соединенных отмеченными дугами. При этом, отмечая вершину q, нужно одновременно запомнить вершину р, отмеченную ранее, откуда в q привела отмеченная дуга α (прямая или обратная).
Замечание. Приведенный алгоритм не указывает, в каком порядке нужно просматривать дуги. Например, можно сначала просмотреть все дуги, инцидентные s, отметить некоторые вершины в соответствии с правилами; затем просмотреть все дуги инцидентные отмеченным вершинам, и т. д. В другом варианте всякий раз просматривают дуги, инцидентные последней отмеченной вершине, и т. д. Этот алгоритм позволяет получить увеличивающую цепь из s в t.
Пример. Применим алгоритм построения увеличивающей цепи к графу, изображенному на рис. 1.15.
Для любой отмеченной вершины будем просматривать все инцидентные ей дуги. Отмечаем источник s. Дуги (s, p), (s, n) отмечаем как выходящие увеличивающие, а дугу (r, s) – как входящую уменьшающую (рис. 1.16).
В скобках указаны вершины, соединенные с новыми вершинами отмеченными дугами. Далее просматриваем дуги, инцидентные р (рис. 1.17). Дугу (p, r) не рассматриваем, поскольку вершина r уже отмечена. Далее, просматривая дуги, инцидентные n, отмечаем дугу (n, t) и вершину t (рис. 1.18).
На этом просмотр заканчиваем, так как отмечен сток t. Идя в обратном направлении, получаем увеличивающую цепь (s, n, t)
Алгоритм отыскания максимального потока в сети
Данный алгоритм, использующий увеличивающие цепи, называется алгоритмом Форда. Он состоит из следующих шагов.
1. Выбирают некоторый поток f(α) из s в t (например, f(α)=0)
2. Находят классы увеличивающих и уменьшающих дуг.
Применяют алгоритм поиска увеличивающей цепи из s в t. Если такой цепи нет, то поток f – максимальный. Если цепь С найдена, то перейти к шагу 4.
4. Находят .
5. Пусть δ > 0 наименьшее из этих чисел.
6. Увеличивают поток вдоль цепи С на δ и пере ходят к шагу 2.
Очевидно, что построенный таким образом поток удовлетворяет следующим условиям:
Этот поток является максимальным. Если начальные данные целочисленны, то выполнение алгоритма Форда завершается за конечное число шагов.
Задача о кратчайшем пути между двумя вершинами графа
Алгоритм Дейкстры
Пусть каждой дуге (х, у) графа G поставлено в соответствие число , которое называется длиной этой дуги (если вершины х и у не соединены дугой, то полагают . Длина пути определяется как сумма длин отдельных дуг, составляющих этот путь. Требуется найти кратчайший путь между двумя заданными вершинами s и t графа G.
Алгоритм поиска кратчайшего пути В ходе выполнения алгоритма окрашивают вершины и дуги графа и вычисляют величины d(x), равные кратчайшему пути из вершины s в вершину х, включающему только окрашенные вершины.
1. Полагают для любого. Окрашивают вершину s и полагают .
2. Для каждой неокрашенной вершины х пересчиты вают величину по формуле .
Если для всех вершин, то вычисления заканчивают. В графе G отсутствуют дуги из вершины s в неокрашенные вершины.
В противном случае окрасить вершину х, для которой величина d(x) минимальна, и дугу, ведущую в вершину х. Полагают у=х.
3. Если y=t, то кратчайший путь найден. В противном случае переходят к шагу 2.
С помощью описанного алгоритма можно определить кратчайший путь из s во все вершины исходного графа. Для этого процедуру окрашивания нужно продолжить до тех пор, пока все вершины графа не будут окрашены. При этом для графа G будет построено покрывающее дерево с корнем в вершине s (если такое дерево существует). В вершину s не ведет ни одна дуга и существует ориентированный путь из s в любую другую вершину графа.
Пример. Найти кратчайший путь между вершинами s и t для графа, изображенного на рис. 1.19
Окрасим вершину s положим для любого и . Легко найти, что ,
Окрашиваем вершину c дугу (s, с), так как величина d(c) минимальна. Полагаем у=с и, поскольку вершина t не окрашена, снова пересчитываем величину d(x). Имеем:
Окрашиваем вершину а и дугу (s, a). Полагаем у=а и пересчитываем величины d(x). Получаем ,
Окрашиваем вершину b и дугу (a, b). Полагаем y=b, находим величины
Окрашиваем вершину d и дугу (a, d) [либо дугу (с, d)]. Полагаем y=d и находим величину d(t)=13
Окрашиваем вершину t. Кратчайшим является путь (s, b, t), Покрывающее дерево кратчайших путей изображено на рис. 1.20.