Метод кратчайшего пути
Прежде чем представлять алгоритмы, необходимо ввести некоторые обозначения. Перенумеруем вершины исходного графа целыми числами от 1 до N. Обозначим через di, jm длину кратчайшего пути из вершинм i в вершину j, который в качестве промежуточных может содержать только первые m вершин графа. Промежуточной вершиной пути является любая принадлежащая ему вершина, не совпадающая с его начальной или… Читать ещё >
Метод кратчайшего пути (реферат, курсовая, диплом, контрольная)
Курсовое проектирование
Метод кратчайшего пути
Теория графов — раздел дискретной математики, изучающий свойства графов. Теория графов находит применение, например, в геоинформационных системах (ГИС). Существующие или вновь проектируемые дома, сооружения, кварталы и т. п. рассматриваются как вершины, а соединяющие их дороги, инженерные сети, линии электропередачи и т. п. — как рёбра. Применение различных вычислений, производимых на таком графе, позволяет, например, найти кратчайший объездной путь или ближайший продуктовый магазин, спланировать оптимальный маршрут.
Если изобразить сеть дорог, связывающую некоторые города, линиями, а города — точками, то получается определенная схема. Такая же схема возникает, если изобразить систему электрических соединений, сетку телеграфных связей и т. п. Если составить план большой работы, то можно изобразить этапы работы точками, а последовательность — какой этап следует за каким — линиями со стрелками, соединяющими эти точки.
Математическая теория организации на базе теории графов исследует свойства коллективов и групп.
Предметом курсовой работы являются графы, с помощью которых могут быть описаны многие структуры, представляющий практический интерес в математике и информатике.
Целями работы являются изучение основных понятий теории графов и разработка программного обеспечения для решения задач поиска кратчайшего пути между вершинами графа.
1. Понятия теории графов
Графом называется фигура, состоящая из точек (вершин) и линий (ребер).
Объекты представляются как вершины, или узлы графа, а связи — как дуги, или рёбра. Для разных областей применения виды графов могут различаться направленностью, ограничениями на количество связей и дополнительными данными о вершинах или рёбрах.
Граф, или неориентированный граф — это упорядоченная пара, для которой выполнены следующие условия:
— V это непустое множество вершин или узлов;
— E это множество пар (в случае неориентированного графа — неупорядоченных) вершин, называемых рёбрами. Многие хорошие результаты, полученные для конечных графов, неверны (или каким-либо образом отличаются) для бесконечных графов. Это происходит потому, что ряд соображений становится ложным в случае бесконечных множеств. Вершины и рёбра графа называются также элементами графа, число вершин в графе — порядком, число рёбер — размером графа. Вершины и называются концевыми вершинами (или просто концами) ребра. Ребро, в свою очередь, соединяет эти вершины. Две концевые вершины одного и того же ребра называются соседними.
Два ребра называются смежными, если они имеют общую концевую вершину. Два ребра называются кратными, если множества их концевых вершин совпадают. Ребро называется петлёй, если его концы совпадают, то есть. Степенью вершины называют количество инцидентных ей рёбер (при этом петли считают дважды). Вершина называется изолированной, если она не является концом ни для одного ребра; висячей (или листом), если она является концом ровно одного ребра.
При изображении графов на рисунках чаще всего используется система обозначений: вершины графа изображаются точками или, при конкретизации смысла вершины, прямоугольниками, овалами и др. где внутри фигуры раскрывается смысл вершины (графы блок-схем алгоритмов). Если между вершинами существует ребро, то соответствующие точки (фигуры) соединяются отрезком или дугой. В случае ориентированного графа дуги заменяют стрелками, или явно указывают направленность ребра. Различают планарные и непланарные графы.
Планарный граф — это граф, который можно изобразить на рисунке без пересечения рёбер (простейшие — треугольник или пара связанных вершин), иначе — непланарный. В том случае, если граф не содержит циклов (путей однократного обхода рёбер и вершин с возвратом в исходную вершину), его принято называть «деревом». Важные виды деревьев в теории графов — бинарные деревья, где каждая вершина имеет одно входящее ребро и ровно два выходящих, или является конечной — не имеющей выходящих рёбер.
Изображение графа может не совпадать с собственно графом (абстрактной структурой), так как одному графу можно сопоставить не одно графическое представление. Изображение призвано показать, какие пары вершин соединены рёбрами, а какие — нет. На практике бывает трудно ответить на вопрос, являются ли два изображения моделями одного и того же графа или нет (другими словами, изоморфны ли соответствующие изображениям графы). В зависимости от задачи, одни изображения могут давать более наглядную картину, чем другие.
2. Основные понятия
2.1 Сетевая модель
алгоритм сетевой неопределенность дейкстра
Сетевой моделью (другие названия: сетевой график, сеть) называется экономико-компьютерная модель, отражающая комплекс работ (операций) и событий, связанных с реализацией некоторого проекта (научно-исследовательского, производственного и др.), в их логической и технологической последовательности и связи. Анализ сетевой модели, представленной в графической или табличной (матричной) форме, позволяет:
во-первых, более четко выявить взаимосвязи этапов реализации проекта;
во-вторых, определить наиболее оптимальный порядок выполнения этих этапов в целях, например, сокращения сроков выполнения всего комплекса работ.
В экономических исследованиях сетевые модели возникают при моделировании экономических процессов методами сетевого планирования и управления (СПУ). Объектом управления в системах сетевого планирования и управления являются коллективы исполнителей, располагающих определенными ресурсами и выполняющих определенный комплекс операций, который призван обеспечить достижение намеченной цели, например, разработку нового изделия, строительства объекта и т. п.
Основой сетевого планирования и управления является сетевая модель (СМ), в которой моделируется совокупность взаимосвязанных работ и событий, отображающих процесс достижения определенной цели. Она может быть представлена в виде графика или таблицы.
Основные понятия сетевой модели:
1. событие,
2. работа,
3. путь На рис 1 графически представлена сетевая модель, состоящая из 11 событий и 16 работ, продолжительность выполнения которых указана над работами.
Работа характеризует материальное действие, требующее использования ресурсов, или логическое, требующее лишь взаимосвязи событий. При графическом представлении работа изображается стрелкой, которая соединяет два события. Она обозначается парой заключенных в скобки чисел (i, j), где i — номер события, из которого работа выходит, а j — номер события, в которое она входит. Работа не может начаться раньше, чем свершится событие, из которого она выходит. Каждая работа имеет определенную продолжительность t (i, j). Например, запись t (2,5) = 4 означает, что работа (2,5) имеет продолжительность 4 единицы.
К работам относятся также такие процессы, которые не требуют ни ресурсов, ни времени выполнения. Они заключаются в установлении логической взаимосвязи работ и показывают, что одна из них непосредственно зависит от другой; такие работы называются фиктивными и на графике изображаются пунктирными стрелками.
Событиями называются результаты выполнения одной или нескольких работ. Они не имеют протяженности во времени. Событие свершается в тот момент, когда оканчивается последняя из работ, входящая в него. События обозначаются одним числом и при графическом представлении сетевая модель изображаются кружком (или иной геометрической фигурой), внутри которого проставляется его порядковый номер (i = 1, 2,…, n).
В сетевой модели имеется начальное событие (с номером 1), из которого работы только выходят, и конечное событие (с номером N), в которое работы только входят.
Путь — это цепочка следующих друг за другом работ, соединяющих начальную и конечную вершины, например, в приведенной выше модели путями являются L1 = (1, 2, 3, 7, 10, 11), L2 = (1, 2, 4, 6, 11) и др.
Продолжительность пути определяется суммой продолжительностей составляющих его работ. Путь, имеющий максимальную длину, называют критическим и обозначают LKp, а его продолжительность — tкр. Работы, принадлежащие критическому пути, называются критическими. Их несвоевременное выполнение ведет к срыву сроков всего комплекса работ.
Cетевая модель имеет ряд характеристик, которые позволяют определить степень напряженности выполнения отдельных работ, а также всего их комплекса и принять решение о перераспределении ресурсов.
2.2 Правила построения сетевых графиков
1. Завершающее событие лишь одно
2. Исходное событие лишь одно
3. Любые два события должны быть непосредственно связаны не более чем одной работой-стрелкой. Если два события связаны более чем одной работой, рекомендуется найти дополнительное событие и фиктивную работу
4. В сети не должно быть замкнутых циклов.
5. Если для выполнения одной из работ необходимо получить результаты всех работ, входящих в предшествующее для нее событие, а для другой работы достаточно получить результат нескольких из этих работ, то нужно ввести дополнительное событие, отражающее результат только этих последних работ, и фиктивную работу, связывающую новое событие с прежним.
Рис. 2. Примеры построения событий в графах Перед расчетом СМ следует убедиться, что она удовлетворяет следующим основным требованиям:
1. События правильно пронумерованы, т. е. для каждой работы (i, j) i
— нумерация событий начинается с исходного события, которому присваивается № 1;
— из исходного события вычеркивают все исходящие из него работы (стрелки), и на оставшейся сети находят событие, в которое не входит ни одна работа, ему и присваивают № 2;
— затем вычеркивают работы, выходящие из события № 2, и вновь находят событие, в которое не входит ни одна работа, и ему присваивают № 3, и так продолжается до завершающего события, номер которого должен быть равен количеству событий в сетевом графике;
— если при очередном вычеркивании работ одновременно несколько событий не имеют входящих в них работ, то их нумеруют очередными номерами в произвольном порядке.
2. Отсутствуют тупиковые события (кроме завершающего), т. е. такие, за которыми не следует хотя бы одна работа (событие 5 из рис. 3);
3. Отсутствуют события (за исключением исходного), которым не предшествует хотя бы одна работа (событие 7);
4. Отсутствуют циклы, т. е. замкнутые пути, соединяющие событие с ним же самим (см. путь (2,4,3)).
Рис. 3. При невыполнении указанных требований бессмысленно приступать к вычислениям характеристик событий, работ и критического пути.
Для событий рассчитывают три характеристики: ранний и поздний срок совершения события, а также его резерв.
Ранний срок свершения события определяется величиной наиболее длительного отрезка пути от исходного до рассматриваемого события, причем tр(1)=0, a tр(N)=tKp (L):
tр(j)=max{tр(j)+(i, j)}; j=2,…, N
Поздний срок свершения события характеризует самый поздний допустимый срок, к которому должно совершиться событие, не вызывая при этом срыва срока свершения конечного события:
tn(i)=min{tn(i) — t (i, j)}; j=2,…, N-1
Этот показатель определяется «обратным ходом», начиная с завершающего события, с учетом соотношения tn(N)=tp(N).
Все события, за исключением событий, принадлежащих критическому пути, имеют резерв R (i):
R (i)=tn(i) — tp(i)
Резерв показывает, на какой предельно допустимый срок можно задержать наступление этого события, не вызывая при этом увеличения срока выполнения всего комплекса работ. Для всех работ (i, j) на основе ранних и поздних сроков свершения всех событий можно определить показатели:
Ранний срок начала — tpn(i, j)=p (i);
Ранний срок окончания — tpo(i, j)=tp(i)+t (i, j);
Поздний срок окончания — tno(U)=tn(j);
Поздний срок начала — tпн(i, j)=tn(j) — t (i, j);
Полный резерв времени — Rn(i, j)=tn(j) — tp(i) — t (i, j);
Независимый резерв ;
Rн(i, j)=max {0; tp(j) — tn(i) — t (i, j)}=max {0; Rn(i, j) — R (i) — R (j)}.
Полный резерв времени показывает, на сколько можно увеличить время выполнения конкретной работы при условии, что срок выполнения всего комплекса работ не изменится.
Независимый резерв времени соответствует случаю, когда все предшествующие работы заканчиваются в поздние сроки, а все последующие — начинаются в ранние сроки. Использование этого резерва не влияет на величину резервов времени других работ.
Путь характеризуется двумя показателями — продолжительностью и резервом. Продолжительность пути определяется суммой продолжительностей составляющих его работ.
Резерв определяется как разность между длинами критического и рассматриваемого путей. Из этого определения следует, что работы, лежащие на критическом пути, и сам критический путь имеют нулевой резерв времени. Резерв времени пути показывает, на сколько может увеличиться продолжительность работ, составляющих данный путь, без изменения продолжительности общего срока выполнения всех работ.
Перечисленные характеристики СМ могут быть получены на основе приведенных аналитических формул, а процесс вычислений отображен непосредственно на графике или в матрице (размерности N*N), или в таблице.
3. Сетевое планирование
Сетевой анализ (сетевое планирование) — метод анализа сроков (ранних и поздних) начала и окончания нереализованных частей проекта, позволяет увязать выполнение различных работ и процессов во времени, получив прогноз общей продолжительности реализации всего проекта.
Для проведения сетевого планирования вначале необходимо расчленить проект на ряд отдельных работ и составить логическую схему (сетевой граф).
Работа — это любые действия, трудовые процессы, сопровождающиеся затратами ресурсов или времени и приводящие к определенным результатам.
Событие — это факт окончания всех входящих в него работ. Считается, что оно происходит мгновенно. С исходного события, которое не имеет предшествующих работ, начинается выполнение проекта. Завершающим событием, которое не имеет последующих работ, заканчивается выполнение проекта.
После построения сетевого графа необходимо оценить продолжительность выполнения каждой работы и выделить работы, которые определяют завершение проекта в целом. Нужно оценить потребность каждой работы в ресурсах и пересмотреть план с учетом обеспечения ресурсами.
3.1 Сетевое планирование в условиях неопределенности
Продолжительность выполнения работ часто трудно задать точно и потому в практической работе вместо одного числа (детерминированная оценка) задаются две оценки — минимальная и максимальная.
Минимальная (оптимистическая) оценка tmin(i, j) характеризует продолжительность выполнения работы при наиболее благоприятных обстоятельствах, а максимальная (пессимистическая) tmах(i, j) — при наиболее неблагоприятных. Продолжительность работы в этом случае рассматривается, как случайная величина, которая в результате реализации может принять любое значение в заданном интервале. Такие оценки называются вероятностными (случайными), и их ожидаемое значение toж оценивается по формуле (при бета-распределении плотности вероятности):
tож(i, j)=(3tmin (i, j)+2tmax(i, j))/5.
Для характеристики степени разброса возможных значений вокруг ожидаемого уровня используется показатель дисперсии S2:
S2(i, j)=(tmax(i, j) — tmin(i, j))2/52=0,04 (tmax(i, j) — tmin(i, j))2
На основе этих оценок можно рассчитать все характеристики СМ, однако они будут иметь иную природу, будут выступать как средние характеристики. При достаточно большом количестве работ можно утверждать (а при малом — лишь предполагать), что общая продолжительность любого, в том числе и критического, пути имеет нормальный закон распределения со средним значением, равным сумме средних значений продолжительности составляющих его работ, и дисперсией, равной сумме дисперсий этих же работ.
Кроме обычных характеристик СМ, при вероятностном задании продолжительности работ можно решить две дополнительные задачи:
1) определить вероятность того, что продолжительность критического пути tкр не превысит заданного директивного уровня Т;
2) определить максимальный срок выполнения всего комплекса работ Т при заданном уровне вероятности р.
Первая задача решается на основе интеграла вероятностей Лапласа Ф (z) использованием формулы:
P (tkp
Где нормированное отклонение случайной величины:
z=(Т-tKp)/SKp;
SKp — среднее квадратическое отклонение, вычисляемое как корень квадратный из дисперсии продолжительности критического пути.
При достаточно большой полученной величине вероятности (более 0,8) можно с высокой степенью уверенности предполагать своевременность выполнения всего комплекса работ.
Для решения второй задачи используется формула:
Т=tож(Lkp)+zЧSkp
4. Теория принятия решений
В различных проблемах принятия решений возникают самые разнообразные задачи оптимизации. Целью решения такой задачи является нахождение варианта, обладающего наилучшими свойствами (наименьшая длина, минимальное затраченное время, минимальная стоимость и т. д.).
Для их решения применяются те или иные методы, точные или приближенные. Существует несколько методов решения задач оптимизации: динамическое программирование, вариационное исчисление, метод статистических решений, использование искусственного интеллекта, методы дискретной математики.
К дискретным моделям относятся графовые (потоковые и транспортные сети, направленные графы) — им на этом ресурсе уделено особое внимание, и алгебраические (логическая алгебра, искусственный интеллект, автоматическая лингвистка)
4.1 Алгоритмы поиска кратчайших путей
Каждой дуге (х, у) исходного графа G поставим в соответствие число ах, у. Если в графе отсутствует некоторая дуга (х, у), положим ах, у =?. Будем называть число ах, у длиной дуги (х, у), хотя ах, у можно также интерпретировать как соответствующие затраты или соответствующий весовой коэффициент. Определим длину пути как сумму длин отдельных дуг, составляющих этот путь.
Для любых двух вершин s и t графа G могут существовать несколько путей, соединяющих вершину s с вершиной t. В теории графов рассматривается задача, цель которой определить такой путь, ведущий из вершины s в вершину t, который имеет минимально возможную длину. Этот путь называется кратчайшим путем между вершинами s и t.
Существует несколько методов поиска кратчайших путей в графе:
· алгоритм Дейкстры (алгоритм поиска кратчайших путей от заданной вершины)
· алгоритм Флойда (алгоритм поиска длин всех кратчайших путей в графе)
· алгоритм Данцига
5. Алгоритм Дейкстры
Описываемый в данном разделе алгоритм позволяет находить в графе кратчайший путь между двумя выделенными вершинами s и t при положительных длинах дуг. Этот алгоритм, предложенный в 1959 г. Дейкстрой, считается одним из наиболее эффективных алгоритмов решения задачи.
Главная идея, лежащая в основе алгоритма Дейкстры, предельно проста. Предположим, что нам известны m вершин, ближайших к вершине s (близость любой вершины x к вершине s определяется длиной кратчайшего пути, ведущего из s в x). Пусть также известны сами кратчайшие пути, соединяющие вершину s с выделенными m вершинами). Покажем теперь, как может быть определена (m + 1) — я ближайшая к s вершина.
Окрасим вершину s и m ближайших к ней вершин. Построим для каждой неокрашенной вершины y пути, непосредственно соединяющие с помощью дуг (х, у) каждую окрашенную вершину х с у. Выберем из этих путей кратчайший, и будем считать его условно кратчайшим путем из вершины s в вершину y.
Какая же из неокрашенных вершин является (m + 1) — й ближайшей к s вершиной? Та, для которой условно кратчайший путь имеет наименьшую длину. Это обусловливается тем, что кратчайший путь из вершины s в (m +1) — ю ближайшую вершину при положительном значении длин всех дуг должен содержать в качестве промежуточных лишь окрашенные вершины, т. е. вершины, входящие в число m вершин, ближайших к вершине s.
Итак, если известны m ближайших к s вершин, то (m + 1) — я ближайшая к s вершина может быть найдена так, как это описано выше. Начиная с m = 0, описанная процедура может повторяться до тех пор, пока не будет получен кратчайший путь, ведущий из вершины s к вершине t.
5.1 Описание алгоритма
Каждой вершине X в ходе алгоритма присваивается число d (x), равное длине кратчайшего пути из вершины S в вершину X и включающем только окрашенные вершины. Положить d (s)=0 и d (x)=? для всех остальных вершин графа. Окрашиваем вершину S и полагаем y=S, где y — последняя окрашенная вершина.
Для каждой неокрашенной вершины X пересчитывается величина d (x) по следующей формуле:
d (x)=min {d (x); d (y)+ ay, x} (1)
Если d (x)=? для всех неокрашенных вершин, то алгоритм заканчивается т.к. отсутствуют пути из вершины S в неокрашенные вершины. Иначе окрашивается та вершина, для которой величина d (x) является минимальной. Окрашивается и дуга, ведущая в эту вершину в соответствии с выражением (1) и полагаем y=x.
Если y=t, кратчайший путь из s в t найден. Иначе переходим к шагу 2.
Каждый раз окрашивается вершина и дуга, заходящая в эту вершину. Окрашенные дуги не могут образовывать цикл, а образуют в исходном графе дерево с корнем (началом) в вершине s. Это дерево называют ориентированным деревом кратчайших путей. Путь из s в t принадлежит этому дереву. При поиске одного кратчайшего пути процедура наращивания завершается при достижении конечной вершины этого пути. Нам же необходимо получить все кратчайшие пути начинающиеся в вершине № 1. Для этого процедуру наращивания ориентированного дерева продолжается до тех пор, пока все вершины не будут включены. Таким образом, мы получаем ориентированное дерево кратчайших путей, которое является покрывающим деревом графа.
Иногда в графе имеются несколько кратчайших путей. Кратчайший путь будет единственным, если в алгоритме ни разу не возникает неоднозначность при окрашивании дуги.
Главным условием успешного применения алгоритма Дейкстры к задаче на графе является неотрицательность длин дуг этого графа.
5.2 Пример применения алгоритма Дейкстры
Необходимо найти все кратчайшие пути от вершины № 1 для графа, представленого на рисунке
Составим матрицу длин кратчайших дуг для данного графа.
Cтартовая вершина, от которой строится дерево кратчайших путей — вершина 1.
Задаем стартовые условия: d (1)=0, d (x)=?
Окрашиваем вершину 1, y=1.
Находим ближайшую вершину к окрашенной нами, используя формулу: d (x)=min {d (x); d (y)+ ay, x}
d (2)=min {d (2); d (1)+a (1,2)}=min {?; 0+10}=10
d (3)=min {d (3); d (1)+a (1,3)}=min {?; 0+18}=18
d (4)=min {d (4); d (1)+a (1,4)}=min {?; 0+8}=8
d (5)=min {d (5); d (1)+a (1,5)}=min {?; 0+?}=?
d (6)=min {d (6); d (1)+a (1,6)}=min {?; 0+?}=?
Минимальную длину имеет путь от вершины 1 до вершины 4 d (4)=8. Включаем вершину № 4 в текущее ориентированноe дерево, а так же дугу ведущую в эту вершину. Согласно выражению это дуга (1,4)
d (2)=min {d (2); d (4)+a (4,2)}=min {10; 8+9}=10
d (3)=min {d (3); d (4)+a (4,3)}=min {18; 8+?}=18
d (5)=min {d (5); d (4)+a (4,5)}=min {?; 8+?}=?
d (6)=min {d (6); d (4)+a (4,6)}=min {?; 8+12}=20
Минимальную длину имеет путь от вершины 1 до вершины 2 d (2)=10. Включаем вершину № 2 в текущее ориентированноe дерево, а так же дугу ведущую в эту вершину. Согласно выражению это дуга (1,2)
d (3)=min {d (3); d (2)+a (2,3)}=min {18; 10+16}=18
d (5)=min {d (5); d (2)+a (2,5)}=min {?; 10+21}=31
d (6)=min {d (6); d (2)+a (2,6)}=min {20; 10+?}=20
Минимальную длину имеет путь от вершины 1 до вершины 3 d (3)=18. Включаем вершину № 3 в текущее ориентированноe дерево, а так же дугу ведущую в эту вершину. Согласно выражению это дуга (1,3)
d (5)=min {d (5); d (3)+a (3,5)}=min {31; 18+15}=31
d (6)=min {d (6); d (3)+a (3,6)}=min {20; 18+?}=20
Минимальную длину имеет путь от вершины 1 до вершины 6 d (6)=20. Включаем вершину № 6 в текущее ориентированноe дерево, а так же дугу ведущую в эту вершину. Согласно выражению это дуга (4,6)
d (5)=min {d (5); d (6)+a (6,5)}=min {31; 20+23}=31
Минимальную длину имеет путь от вершины 1 до вершины 5 d (5)=31. Включаем вершину № 5 в текущее ориентированноe дерево, а так же дугу ведущую в эту вершину. Согласно выражению это дуга (2,5)
Мы получили ориентированное дерево кратчайших путей начинающихся в вершине № 1 для исходного графа.
d (1)=1 Длина маршрута L=0
d (2)=1−2 Длина маршрута L=10
d (3)=1−3 Длина маршрута L=18
d (4)=1−4 Длина маршрута L=8
d (5)=1−2-5 Длина маршрута L=31
d (6)=1−4-6 Длина маршрута L=20
Ориентированное дерево с корнем в вершине № 1:
6. Алгоритм Флойда
Алгоритм Флойда является одним из методов поиска кратчайших путей в графе. В отличии от алгоритма Дейкстры, который позволяет при доведении до конца построить ориентированное дерево кратчайших путей от некоторой вершины, метод Флойда позволяет найти длины всех кратчайших путей в графе. Конечно эта задача может быть решена и многократным применением алгоритма Дейкстры (каждый раз последовательно выбираем вершину от первой до N-ной, пока не получим кратчайшие пути от всех вершин графа), однако реализация подобной процедуры потребовала бы значительных вычислительных затрат.
Прежде чем представлять алгоритмы, необходимо ввести некоторые обозначения. Перенумеруем вершины исходного графа целыми числами от 1 до N. Обозначим через di, jm длину кратчайшего пути из вершинм i в вершину j, который в качестве промежуточных может содержать только первые m вершин графа. Промежуточной вершиной пути является любая принадлежащая ему вершина, не совпадающая с его начальной или конечной вершинами. Если между вершинами i и j не существует ни одного пути указанного типа, то условно будем считать, что di, jm=?. Из данного определения величин di, jm следует, что величина di, j0, представляет длину кратчайшего пути из вершины i в вершину j, не имеющего промежуточных вершин, т. е. длину кратчайшей дуги, соединяющей i с j (если такие дуги присутствуют в графе). для любой вершины i положим di, jm = 0. Отметим далее, что величина di, jmпредставляет длину кратчайшего пути между вершинами i и j.
Обозначим через Dm матрицу размера NxN, элемент (i, j) которой совпадает с di, jm. Если в исходном графе нам известна длина каждой дуги, то мы можем сформировать матрицу D0. Наша цель состоит в определении матрицы DN, представляющей кратчайшие пути между всеми вершинами рассматриваемого графа.
В алгоритме Флойда в качестве исходной выступает матрица D0. Вначале из этой матрицы вычисляется матрица D1. Затем по матрице D1 вычисляется матрицав D2 и т. д. Процесс повторяется до тех пор, пока по матрице DN-1 не будет вычислена матрица DN.
Рассмотрим основную идею, лежащую в основе алгоритма Флойда. Суть алгоритма Флойда заключается в проверке того, не окажется ли путь из вершины i в вершину j короче, если он будет проходить через некоторую промежуточную вершину m. Предположим, что нам известны:
кратчайший путь из вершины i в вершину m, в котором в качестве промежуточных допускается использование только первых (m — 1) вершин;
кратчайший путь из вершины m в вершину j, в котором в качестве промежуточных допускается использование только первых (m — 1) вершин;
кратчайший путь из вершины i в вершину j, в котором в качестве промежуточных допускается использование только первых (m — 1) вершин.
Поскольку по предположению исходный граф не может содержать контуров отрицательной длины, один из двух путей — путь, совпадающий с представленным в пункте 3, или путь, являющийся объединением путей из пунктов 1 и 2 — должен быть кратчайшим путем из вершины i в вершину j, в котором в качестве промежуточных допускается использование только первых m вершин.
di, jm =min{di, mm-1+ dm, jm-1; di, jm -1}
Из соотношения видно, что для вычисления элементов матрицы Dm необходимо располагать лишь элементами матрицы Dm-1. Более того, соответствующие вычисления могут быть проведены без обращения к исходному графу.
6.1 Алгоритм Флойда для нахождения на графе кратчайших путей
Перенумеровать вершины графа от 1 до N целыми числами, определить матрицу D0, каждый элемент di, j которой есть длина кратчайшей дуги между вершинами i и j. Если такой дуги нет, положить значение элемента равным ?. Кроме того, положить значения диагонального элемента di, j равным 0.
Для целого m, последовательно принимающего значения 1… N определить по элементам матрицы Dm-1 элементы Dm
Алгоритм заканчивается получением матрицы всех кратчайших путей DN, N — число вершин графа.
Напомним, для определения по известным элементам матрицы Dm-1 элементов матрицы Dm в алгоритме Флойда применяется рекурсивное соотношение:
di, jm =min{di, mm-1+ dm, jm-1; di, jm -1}
di, jm — элемент матрицы Dm, di, jm -1 — элементы матрицы Dm-1 найденой на предыдущем шаге алгоритма.
Пример Алгоритма Флойда
Необходимо найти кратчайшие пути между каждой парой вершин в графе, представленном на рисунке:
Пронумеруем все вершины графа, и составим матрицу длин кратчайших дуг D0, в случае, если дуги между вершиной i и j не существует, элементу di, j матрицы присваивается значение ?. Исходный граф с пронумерованными вершинами представлен на рисунке ниже.
Матрица D0
D0= | |||||||
На основании матрицы D0, вычислим последовательно все элементы матрицы D1. Для этого мы используем рекуррентное соотношение
di,j1=min{di, 10+ d1,j0; di,j0}.
d1,11=min{d1,10+d1,10d1,10}=min {0+0; 0}=0
d1,21=min{d1,10+d1,20d1,20}=min {0+10; 10}=10
и так далее.
7. Алгоритм Данцига
Этот алгоритм отличается от алгоритма Флойда последовательностью выполнения действий. Перенумеруем все вершины графа от 1 до n целыми числами и обозначим через di, jm длину пройденного пути из i в j где в качестве промежуточных использованы первые m вершин графа. Матрица Dm длин кратчайших путей имеет здесь размерность m*m.
1. Каждая вычисленная матрица Dm содержит на одну строку и столбец больше чем ее предшественница. Элементы матрицы не входящие в последнюю строку или столбец вычисляются так же, как и в алгоритме Флойда.
di, jm=min{di, mm-1+ dm, jm-1; di, jm-1} (1)
2. Кратчайший путь из вершины m в j, в котором допускаются первые m промежуточных вершин, должен иметь в своей первой части дугу из вершины m в некоторую вершину k, a во второй — кратчайший путь из вершины k в j.
dm, jm=min{d0m, k+ dm-1k, j} k=1…m-1 (2)
3. Кратчайший путь из вершины i в m, в котором допускается первых m промежуточных вершин. Имеет своей первой частью кратчайший путь из вершины i в некоторую промежуточную вершину k. А во второй — кратчайшую дугу из k в m.
di, mm=min{dm-1i, k+ d0k, m} k=1…m-1 (3)
4. диагональный элемент матрицы равен 0.
Вычислительная сложность алгоритмов
Вычислительная сложность алгоритма — количество элементарных операций, затрачиваемых алгоритмом для решения конкретной задачи. Сложность зависит не только от размерности входных данных, но и от самих данных. Очевидно, что чем сложнее алгоритм в вычислительном плане, тем больше времени и вычислительных ресурсов потребует его выполнение.
Различают временную и пространственную сложность. Первая определяет время, требуемое на решение задачи заданной размерности с помощью данного алгоритма, а вторая — количество требуемых ресурсов (памяти) при тех же условиях.
Каждый вычислительный алгоритм может быть отнесен к одному из двух классов сложности. В данном случае это множество задач, для решения которых известны алгоритмы, схожие по трудоемкости. В классе P вычислительные затраты линейно растут с увеличением размерности. Например, время, требуемое на уборку снега, прямо пропорционально площади. Если ее увеличить вдвое, то и временные затраты также возрастут в два раза. Класс NP включает задачи, для решения которых известны только алгоритмы, сложность которых экспоненциально зависит от размерности данных. Поэтому они, как правило, неэффективны при работе с большими множествами. Примером является задача поиска выхода из лабиринта, временные затраты на который экспоненциально растут с увеличением числа разветвлений.
Определим вычислительные сложнасти алгоритмов поиска кратчайших путей Дейкстры, Флойда, и Данцига.
Вычислительная сложность алгоритма Дейкстры
При каждом пересчете величины d (x) мы совершаем 2 операции (сложение и сравнение). всего при каждой новой итерации алгоритма совершается n-1 такие операции. Всего же в процессе построения дерева путей для одной вершины графа мы совершаем У2 (n-1)=n2 таких операций. Чтобы получить все кратчайшие пути в графе нам необходимо провести алгоритм дейкстры для каждой из n вершин и затратить n*n2=n3 операций. Если учесть операции окрашивания вершин и выбора min (d (x)) то получим ?1.5n3 операций для графа с числом вершин равным n.
Вычислительная сложность алгоритма Флойда
Расчет каждого нового элемента матрицы Dm включает в себя 2 операции (сложение и сравнение). Каждая матрица содержит N*N элементов, следовательно при каждой итерации необходимо выполнить 2N2операций. Всего в процессе алгоритма расчитывается N таблиц, то есть вычислительная сложность алгоритма Флойда составляет 2N3 операций.
Вычислительная сложность алгоритма Данцига
Алгоритм Данцига отличается от Флойда только последовательностью выполнения операций, поэтому имеет такую же вычислительную сложность порядка 2N3 операций.
Заключение
Результаты и методы теории графов применяются при решении транспортных задач о перевозках, для нахождения оптимальных решений задачи о назначениях, для выделения «узких мест» при планировании и управлении разработок проектов, при составлении оптимальных маршрутов доставки грузов, а также при моделировании сложных технология, процессов, в построении различных дискретных устройств, в программировании и т. д.
В теории графов существуют специфические методы решения экстремальных задач. Один из них основан на теореме о максимальном потоке и минимальном разрезе, утверждающей, что максимальный поток, который можно пропустить через сеть из вершины U в вершину V, равен минимальной пропускной способности разрезов, разделяющих вершины U и V. Были построены различные эффективные алгоритмы нахождения максимального потока.
В ходе выполнения данной курсовой работы были рассмотрены основные понятия теории графов, описаны алгоритмы Флойда, Дейкстры и Данцига, проведено доказательство корректности алгоритма и разобран пример решения задачи с помощью этого алгоритма.
алгоритм сетевой неопределенность дейкстра
1. Берж К. теория графов и ее применение: Пер. с франц. М., 2009.
2. Горбатов В. А. Основы дискретной математики. М., 2008.
3. Гэри М., Джонсон Д. Вычислительные машины и труднорешаемые задачи: Пер. с англ. М., 2012.
4. Гоппа В. Д. Введение в алгебраическую теорию информации. М., 2009.
5. Орест О. Теория графов: Пер. с англ. М., 2010.
6. Рейнгольд Э., Нивельгердт Ю., Део Н. Комбинаторные алгоритмы: Пер. с англ. М., 2010.
7. Ахо А., Хопкрофт Дж., Ульман Дж. Построение и анализ вычислительных алгоритмов: Пер. с англ. М., 2011.
8. Кристофидес Н. Теория графов. Адгоритмический подход: Пер. с англ. М., 2011.