SlideShare una empresa de Scribd logo
1 de 12
Практическое занятие 14.
Поиск кратчайшего пути
1.
2.
3.
4.

Теоретические сведения
Контрольные вопросы
Указания по выполнению заданий
Задания
Теоретические сведения
В задаче о кратчайшем пути задается взвешенный
ориентированный граф G = (V, Е) с весовой функцией
w: Е → R, отображающей ребра на их веса, значения
которых выражаются действительными числами. Вес
пути
p = (v0, v1,..., vN) равен суммарному весу
входящих в него ребер:
N

w( p ) = w(vi −, vi )
∑
1
i=
1

Вес кратчайшего пути из вершины u в вершину v
определяется соотношением

{

}

p
min w( p ) : u  → если имеется путь от u к v,
 v

δ(u , v) = 
∞
в противном случае.


Тогда по определению кратчайший путь из вершины u в
вершину v – это любой путь, вес которого
удовлетворяет соотношению w(р) = δ(u, v).
Теоретические сведения
Рассмотрим алгоритмы решения задачи о кратчайшем пути из
одной вершины, в которой для заданного графа G = (V, Е)
требуется найти кратчайший путь, который начинается в
определенной исходной вершине s ∈ V (для краткости будем
именовать ее истоком) и заканчивается в каждой из вершин v
∈ V. Во всех описанных далее алгоритмах предполагается,
что ориентированный граф G хранится в виде списков
смежных вершин. Кроме того, вместе с каждым ребром
хранится его вес, так что при просмотре каждого списка
смежности вес каждого из его ребер можно определить в
течение времени O(1).
В некоторых алгоритмах поиска кратчайшего пути (например, в
алгоритме Дейкстры) используется метод релаксации, или
ослабления. Для каждой вершины v ∈ V поддерживается
атрибут d[v], представляющий собой верхнюю границу веса,
которым обладает кратчайший путь из истока s в вершину v.
Назовем атрибут d[v] оценкой кратчайшего пути.
Инициализация оценок кратчайших путей и
предшественников производится в приведенной ниже
процедуре, время работы которой равно Θ(V):
Теоретические сведения
Initialize_Single_Source(G, s)
1. for (для) каждой вершины v ∈ V[G]
2.
do d[v] ← ∞
3.
π[v] ← NIL
4. d[s] ← 0
После инициализации для всех v ∈ V π[v] = NIL, d[s] = 0 и
для всех
v ∈ V – {s} d[v] = ∞.
Процесс ослабления ребра (u, v) заключается в проверке,
нельзя ли улучшить найденный до сих пор кратчайший
путь к вершине v, проведя его через вершину u, а также
в обновлении атрибутов d[v] и π[v] при наличии такой
возможности улучшения. Ослабление может уменьшить
оценку кратчайшего пути d[v] и обновить поле π[v]
вершины v. Приведенный ниже код выполняет
ослабление ребра (u, v):
Теоретические сведения
Relax(u, v, w)
1. if d[v] > d[u] + w(u, v)
2. then d[v] ← d[u) + w(u, v)
3.
π[v] ← u
Пример 1. Алгоритм Дейкстры. Алгоритм Дейкстры решает задачу о
кратчайшем пути из одной вершины во взвешенном
ориентированном графе G = (V, Е) в том случае, когда веса ребер
неотрицательны, т.е. для всех ребер (u, v) ∈ Е выполняется
неравенство w(u, v) ≥ 0.
Dijkstra(G, w, s)
1. Initialize_Single_Source(G, s)
2. S ← ∅
3. Q ← V[G]
4. while Q ≠ 0
5.
do u ← Extract_Min(Q)
6.
S ← S ∪ {u}
7.
for (для) каждой вершины v ∈ Adj[u]
8.
do Relax(u, v, w)
Теоретические сведения
В алгоритме Дейкстры поддерживается множество вершин S,
для которых уже вычислены окончательные веса кратчайших
путей к ним из истока s. В этом алгоритме поочередно
выбирается вершина u ∈ V – S, которой на данном этапе
соответствует минимальная оценка кратчайшего пути. После
добавления этой вершины u в множество S производится
ослабление всех исходящих из нее ребер. По завершении
обработки алгоритмом Дейкстры взвешенного
ориентированного графа G = (V, Е) с неотрицательной
весовой функцией w и истоком s для всех вершин u ∈ V
выполняется равенство d[u] = δ(s, u).
В приведенной реализации алгоритма Дейкстры используется
неубывающая очередь с приоритетами Q, состоящая из
вершин, в роли ключей для которых выступают значения d.
Очередь с приоритетами – это структура данных,
предназначенная для обслуживания множества S, с каждым
элементом которого связано определенное значение,
называющееся ключом (key). В неубывающей очереди с
приоритетами поддерживаются следующие операции.
Теоретические сведения
• Операция Insert(S, x) вставляет элемент x в множество S. Эту
операцию можно записать как S ← S ∪ {x}.
• Операция Minimum(S) возвращает элемент множества S с
наименьшим ключом.
• Операция Extract_Min(S) возвращает элемент с наименьшим
ключом, удаляя его при этом из множества S.
• Операция Decrease_Key(S, x, k) уменьшает значение ключа,
соответствующего элементу x, путем его замены ключом со
значением k. Предполагается, что величина k не больше текущего
ключа элемента x.
Пример 2. Алгоритм Флойда-Уоршалла. Будем считать, что весовая
функция w задана в виде матрицы W.
Floyd_Warshall(W)
1. n ← rows[W]
2. D(0) ← W
3. for k ← 1 to n
4. do for i ← 1 to n
5.
do for j ← 1 to n
6.
do 7. return D(n)
Теоретические сведения
В алгоритме Флойда-Уоршалла рассматриваются
промежуточные вершины кратчайшего пути. Промежуточной
вершиной простого пути
p = (v1, v2, …, vN) называется
произвольная вершина, отличная от v1 и vN, т.е. это любая
вершина из множества {v2, v3,..., vN – 1}.
Для построения кратчайших путей в алгоритме ФлойдаУоршалла нужно на основе матрицы D, содержащей веса
кратчайших путей, вычислить матрицу предшествования П =
(πij). Если задана матрица предшествования П, то вывести
вершины на указанном кратчайшем пути можно с помощью
процедуры Print_All_Pairs_Shortest_Path.
Print_All_Pairs_Shortest_Path(II, i, j)
1. if i = j
2. then print i
3. else if πij = NIL
4.
then print "He существует пути из" i "в" j
5.
else Print_All_Pairs_Shortest_Path(II, i, πij)
6. print j
Теоретические сведения
Для получения матрицу предшествования П нужно вычислить
последовательность матриц П(0), П(1), ..., П(n), где П(n) = П,
а элемент определяется как предшественник вершины j на
кратчайшем пути из вершины i, все промежуточные
вершины которого принадлежат множеству {1, 2, ..., k}.
Можно дать следующее рекурсивное определение величины .
Если k = 0, то

,

NIL если i = j или wij =∞
i
если i ≠ j и wij <∞
.



(
πij0) =

При k ≥ 1
(
πijk )

(
1
(
1
(k 1
 ijk − ) если d ijk − ) ≤d ikk − ) +d kj − ) ,
π( 1

=
(
(
(
π( k −1) если d ijk −1) >d ikk −1) +d kjk −1) .
 kj

Контрольные вопросы
1.
2.
3.
4.
5.
6.
7.
8.
9.

Вес пути.
Вес кратчайшего пути.
Постановка задачи поиска кратчайшего пути.
Метод релаксации.
Алгоритм Дейкстры.
Неубывающая очередь с приоритетами.
Операции над очередью с приоритетами.
Алгоритм Флойда-Уоршалла.
Вычисление матрицы предшествования в алгоритме
Флойда-Уоршалла.
10. Вывод кратчайших путей по матрице
предшествования.
Указания по выполнению заданий
1.
2.
3.

4.

Получить задание
Получить решение задачи.
Подготовить отчет по выполнению задания. Отчет
должен включать задание и описание этапов
выполнения задания.
Ответить на вопросы по выполнению задания и
контрольные вопросы
Задания
1. Выполнить анализ сложности алгоритма Дейкстры.
2. Дополнить алгоритм Дейкстры выводом кратчайшего
пути из истока.
3. Описать алгоритм Дейкстры на языке высокого
уровня (например, на языке C).
4. Выполнить анализ сложности алгоритма ФлойдаУоршалла.
5. Описать алгоритм Флойда-Уоршалла на языке
высокого уровня (например, на языке C).
6. Разработать алгоритм поиска кратчайшего пути на
основе какого-либо из алгоритмов обхода графа.
Выполнить анализ сложности и сравнить с
алгоритмами Дейкстры и Флойда-Уоршалла.
7. Модифицировать приведенные алгоритмы для
случая отрицательных весов.

Más contenido relacionado

La actualidad más candente

Лекция 12 Теоретико-числовые алгоритмы Часть 1
Лекция 12 Теоретико-числовые алгоритмы Часть 1Лекция 12 Теоретико-числовые алгоритмы Часть 1
Лекция 12 Теоретико-числовые алгоритмы Часть 1simple_people
 
L6: Метод опорных векторов
L6: Метод опорных векторовL6: Метод опорных векторов
L6: Метод опорных векторовTechnosphere1
 
L5: Л5 Байесовские алгоритмы
L5: Л5 Байесовские алгоритмыL5: Л5 Байесовские алгоритмы
L5: Л5 Байесовские алгоритмыTechnosphere1
 
05 динамическое программирование
05 динамическое программирование05 динамическое программирование
05 динамическое программированиеFedor Tsarev
 
05 динамическое программирование
05 динамическое программирование05 динамическое программирование
05 динамическое программированиеFedor Tsarev
 
04 динамическое программирование - основные концепции
04 динамическое программирование - основные концепции04 динамическое программирование - основные концепции
04 динамическое программирование - основные концепцииFedor Tsarev
 
простейшие применения принципа_сжатых_отображени1
простейшие применения принципа_сжатых_отображени1простейшие применения принципа_сжатых_отображени1
простейшие применения принципа_сжатых_отображени1Vladimir Kukharenko
 
20111023 circuit complexity_seminar_lecture04_mihajlin
20111023 circuit complexity_seminar_lecture04_mihajlin20111023 circuit complexity_seminar_lecture04_mihajlin
20111023 circuit complexity_seminar_lecture04_mihajlinComputer Science Club
 
ITMO RecSys course. Autumn 2014. Lecture 6
ITMO RecSys course. Autumn 2014. Lecture 6ITMO RecSys course. Autumn 2014. Lecture 6
ITMO RecSys course. Autumn 2014. Lecture 6Andrey Danilchenko
 
L3: Линейная и логистическая регрессия
L3: Линейная и логистическая регрессияL3: Линейная и логистическая регрессия
L3: Линейная и логистическая регрессияTechnosphere1
 
Лекция №6 "Линейные модели для классификации и регрессии"
Лекция №6 "Линейные модели для классификации и регрессии" Лекция №6 "Линейные модели для классификации и регрессии"
Лекция №6 "Линейные модели для классификации и регрессии" Technosphere1
 
Proizvodnaya funkcii
Proizvodnaya funkciiProizvodnaya funkcii
Proizvodnaya funkciiDimon4
 
ИТМО Machine Learning 2015. Рекомендательные системы
ИТМО Machine Learning 2015. Рекомендательные системыИТМО Machine Learning 2015. Рекомендательные системы
ИТМО Machine Learning 2015. Рекомендательные системыAndrey Danilchenko
 
Use of eliptic curves for generating digital signature
Use of eliptic curves for generating digital signatureUse of eliptic curves for generating digital signature
Use of eliptic curves for generating digital signatureAndrei Poliakov
 
Лекция 4. Префиксные деревья (tries, prefix trees)
Лекция 4. Префиксные деревья (tries, prefix trees)Лекция 4. Префиксные деревья (tries, prefix trees)
Лекция 4. Префиксные деревья (tries, prefix trees)Mikhail Kurnosov
 
ИТМО Machine Learning. Рекомендательные системы — часть 1
ИТМО Machine Learning. Рекомендательные системы — часть 1ИТМО Machine Learning. Рекомендательные системы — часть 1
ИТМО Machine Learning. Рекомендательные системы — часть 1Andrey Danilchenko
 
Метод проекции градиента для решения стационарной системы Стокса как задачи ...
Метод проекции градиента для решения стационарной системы Стокса  как задачи ...Метод проекции градиента для решения стационарной системы Стокса  как задачи ...
Метод проекции градиента для решения стационарной системы Стокса как задачи ...iST1
 
ИТМО Machine Learning. Рекомендательные системы — часть 2
ИТМО Machine Learning. Рекомендательные системы — часть 2ИТМО Machine Learning. Рекомендательные системы — часть 2
ИТМО Machine Learning. Рекомендательные системы — часть 2Andrey Danilchenko
 

La actualidad más candente (20)

Лекция 12 Теоретико-числовые алгоритмы Часть 1
Лекция 12 Теоретико-числовые алгоритмы Часть 1Лекция 12 Теоретико-числовые алгоритмы Часть 1
Лекция 12 Теоретико-числовые алгоритмы Часть 1
 
L6: Метод опорных векторов
L6: Метод опорных векторовL6: Метод опорных векторов
L6: Метод опорных векторов
 
L5: Л5 Байесовские алгоритмы
L5: Л5 Байесовские алгоритмыL5: Л5 Байесовские алгоритмы
L5: Л5 Байесовские алгоритмы
 
05 динамическое программирование
05 динамическое программирование05 динамическое программирование
05 динамическое программирование
 
05 динамическое программирование
05 динамическое программирование05 динамическое программирование
05 динамическое программирование
 
04 динамическое программирование - основные концепции
04 динамическое программирование - основные концепции04 динамическое программирование - основные концепции
04 динамическое программирование - основные концепции
 
Q games
Q gamesQ games
Q games
 
простейшие применения принципа_сжатых_отображени1
простейшие применения принципа_сжатых_отображени1простейшие применения принципа_сжатых_отображени1
простейшие применения принципа_сжатых_отображени1
 
20111023 circuit complexity_seminar_lecture04_mihajlin
20111023 circuit complexity_seminar_lecture04_mihajlin20111023 circuit complexity_seminar_lecture04_mihajlin
20111023 circuit complexity_seminar_lecture04_mihajlin
 
ITMO RecSys course. Autumn 2014. Lecture 6
ITMO RecSys course. Autumn 2014. Lecture 6ITMO RecSys course. Autumn 2014. Lecture 6
ITMO RecSys course. Autumn 2014. Lecture 6
 
Integral1
Integral1Integral1
Integral1
 
L3: Линейная и логистическая регрессия
L3: Линейная и логистическая регрессияL3: Линейная и логистическая регрессия
L3: Линейная и логистическая регрессия
 
Лекция №6 "Линейные модели для классификации и регрессии"
Лекция №6 "Линейные модели для классификации и регрессии" Лекция №6 "Линейные модели для классификации и регрессии"
Лекция №6 "Линейные модели для классификации и регрессии"
 
Proizvodnaya funkcii
Proizvodnaya funkciiProizvodnaya funkcii
Proizvodnaya funkcii
 
ИТМО Machine Learning 2015. Рекомендательные системы
ИТМО Machine Learning 2015. Рекомендательные системыИТМО Machine Learning 2015. Рекомендательные системы
ИТМО Machine Learning 2015. Рекомендательные системы
 
Use of eliptic curves for generating digital signature
Use of eliptic curves for generating digital signatureUse of eliptic curves for generating digital signature
Use of eliptic curves for generating digital signature
 
Лекция 4. Префиксные деревья (tries, prefix trees)
Лекция 4. Префиксные деревья (tries, prefix trees)Лекция 4. Префиксные деревья (tries, prefix trees)
Лекция 4. Префиксные деревья (tries, prefix trees)
 
ИТМО Machine Learning. Рекомендательные системы — часть 1
ИТМО Machine Learning. Рекомендательные системы — часть 1ИТМО Machine Learning. Рекомендательные системы — часть 1
ИТМО Machine Learning. Рекомендательные системы — часть 1
 
Метод проекции градиента для решения стационарной системы Стокса как задачи ...
Метод проекции градиента для решения стационарной системы Стокса  как задачи ...Метод проекции градиента для решения стационарной системы Стокса  как задачи ...
Метод проекции градиента для решения стационарной системы Стокса как задачи ...
 
ИТМО Machine Learning. Рекомендательные системы — часть 2
ИТМО Machine Learning. Рекомендательные системы — часть 2ИТМО Machine Learning. Рекомендательные системы — часть 2
ИТМО Machine Learning. Рекомендательные системы — часть 2
 

Destacado (6)

Social Web 1
Social Web 1Social Web 1
Social Web 1
 
Droid con 2012 bangalore v2.0
Droid con 2012   bangalore v2.0Droid con 2012   bangalore v2.0
Droid con 2012 bangalore v2.0
 
Health Events, CHNA
Health Events, CHNAHealth Events, CHNA
Health Events, CHNA
 
Clothes
ClothesClothes
Clothes
 
Multisizer 375 nm to 1600 microns
Multisizer 375 nm to 1600 micronsMultisizer 375 nm to 1600 microns
Multisizer 375 nm to 1600 microns
 
Clean environment
Clean environmentClean environment
Clean environment
 

Similar a практика 14

Лекция 9: Графы. Поиск кратчайшего пути в графе
Лекция 9: Графы. Поиск кратчайшего пути в графеЛекция 9: Графы. Поиск кратчайшего пути в графе
Лекция 9: Графы. Поиск кратчайшего пути в графеMikhail Kurnosov
 
практика 15
практика 15практика 15
практика 15student_kai
 
Лекция №13. Графы: сильно связные компоненты и остовные деревья. Предмет "Стр...
Лекция №13. Графы: сильно связные компоненты и остовные деревья. Предмет "Стр...Лекция №13. Графы: сильно связные компоненты и остовные деревья. Предмет "Стр...
Лекция №13. Графы: сильно связные компоненты и остовные деревья. Предмет "Стр...Nikolay Grebenshikov
 
20080928 structuralcomplexitytheory lecture01-02
20080928 structuralcomplexitytheory lecture01-0220080928 structuralcomplexitytheory lecture01-02
20080928 structuralcomplexitytheory lecture01-02Computer Science Club
 
Лекция №12. Графы: представление, обходы, топологическая сортировка. Предмет ...
Лекция №12. Графы: представление, обходы, топологическая сортировка. Предмет ...Лекция №12. Графы: представление, обходы, топологическая сортировка. Предмет ...
Лекция №12. Графы: представление, обходы, топологическая сортировка. Предмет ...Nikolay Grebenshikov
 
Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...
Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...
Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...Nikolay Grebenshikov
 
Лекция 16 Вычислительная геометрия
Лекция 16 Вычислительная геометрияЛекция 16 Вычислительная геометрия
Лекция 16 Вычислительная геометрияsimple_people
 
Григорий Анатольевич Кабатянский - Конечные алгебры, геометрии и коды
Григорий Анатольевич Кабатянский - Конечные алгебры, геометрии и кодыГригорий Анатольевич Кабатянский - Конечные алгебры, геометрии и коды
Григорий Анатольевич Кабатянский - Конечные алгебры, геометрии и кодыYandex
 
Факторизационные модели в рекомендательных системах
Факторизационные модели в рекомендательных системахФакторизационные модели в рекомендательных системах
Факторизационные модели в рекомендательных системахromovpa
 
экспертные системы
экспертные системыэкспертные системы
экспертные системыsokol_klinik
 
20101028 proof complexity_hirsch_lecture06
20101028 proof complexity_hirsch_lecture0620101028 proof complexity_hirsch_lecture06
20101028 proof complexity_hirsch_lecture06Computer Science Club
 
Лекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмовЛекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмовMikhail Kurnosov
 
Лекция №5 "Обработка текстов, Naive Bayes"
Лекция №5 "Обработка текстов, Naive Bayes" Лекция №5 "Обработка текстов, Naive Bayes"
Лекция №5 "Обработка текстов, Naive Bayes" Technosphere1
 
Лекция 13: Трудноразрешимые задачи. NP-полнота.
Лекция 13: Трудноразрешимые задачи. NP-полнота.Лекция 13: Трудноразрешимые задачи. NP-полнота.
Лекция 13: Трудноразрешимые задачи. NP-полнота.Mikhail Kurnosov
 
20110313 systems of_typed_lambda_calculi_moskvin_lecture06
20110313 systems of_typed_lambda_calculi_moskvin_lecture0620110313 systems of_typed_lambda_calculi_moskvin_lecture06
20110313 systems of_typed_lambda_calculi_moskvin_lecture06Computer Science Club
 
Линейная алгебра - II
Линейная алгебра - IIЛинейная алгебра - II
Линейная алгебра - IIDEVTYPE
 

Similar a практика 14 (20)

Лекция 9: Графы. Поиск кратчайшего пути в графе
Лекция 9: Графы. Поиск кратчайшего пути в графеЛекция 9: Графы. Поиск кратчайшего пути в графе
Лекция 9: Графы. Поиск кратчайшего пути в графе
 
практика 15
практика 15практика 15
практика 15
 
Основы MATLAB. Численные методы
Основы MATLAB. Численные методыОсновы MATLAB. Численные методы
Основы MATLAB. Численные методы
 
Лекция №13. Графы: сильно связные компоненты и остовные деревья. Предмет "Стр...
Лекция №13. Графы: сильно связные компоненты и остовные деревья. Предмет "Стр...Лекция №13. Графы: сильно связные компоненты и остовные деревья. Предмет "Стр...
Лекция №13. Графы: сильно связные компоненты и остовные деревья. Предмет "Стр...
 
20080928 structuralcomplexitytheory lecture01-02
20080928 structuralcomplexitytheory lecture01-0220080928 structuralcomplexitytheory lecture01-02
20080928 structuralcomplexitytheory lecture01-02
 
Лекция №12. Графы: представление, обходы, топологическая сортировка. Предмет ...
Лекция №12. Графы: представление, обходы, топологическая сортировка. Предмет ...Лекция №12. Графы: представление, обходы, топологическая сортировка. Предмет ...
Лекция №12. Графы: представление, обходы, топологическая сортировка. Предмет ...
 
Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...
Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...
Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...
 
Лекция 16 Вычислительная геометрия
Лекция 16 Вычислительная геометрияЛекция 16 Вычислительная геометрия
Лекция 16 Вычислительная геометрия
 
Григорий Анатольевич Кабатянский - Конечные алгебры, геометрии и коды
Григорий Анатольевич Кабатянский - Конечные алгебры, геометрии и кодыГригорий Анатольевич Кабатянский - Конечные алгебры, геометрии и коды
Григорий Анатольевич Кабатянский - Конечные алгебры, геометрии и коды
 
Факторизационные модели в рекомендательных системах
Факторизационные модели в рекомендательных системахФакторизационные модели в рекомендательных системах
Факторизационные модели в рекомендательных системах
 
Get Ft
Get FtGet Ft
Get Ft
 
экспертные системы
экспертные системыэкспертные системы
экспертные системы
 
20101028 proof complexity_hirsch_lecture06
20101028 proof complexity_hirsch_lecture0620101028 proof complexity_hirsch_lecture06
20101028 proof complexity_hirsch_lecture06
 
5
55
5
 
Лекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмовЛекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмов
 
Лекция №5 "Обработка текстов, Naive Bayes"
Лекция №5 "Обработка текстов, Naive Bayes" Лекция №5 "Обработка текстов, Naive Bayes"
Лекция №5 "Обработка текстов, Naive Bayes"
 
Лекция 13: Трудноразрешимые задачи. NP-полнота.
Лекция 13: Трудноразрешимые задачи. NP-полнота.Лекция 13: Трудноразрешимые задачи. NP-полнота.
Лекция 13: Трудноразрешимые задачи. NP-полнота.
 
fiz-mat
fiz-matfiz-mat
fiz-mat
 
20110313 systems of_typed_lambda_calculi_moskvin_lecture06
20110313 systems of_typed_lambda_calculi_moskvin_lecture0620110313 systems of_typed_lambda_calculi_moskvin_lecture06
20110313 systems of_typed_lambda_calculi_moskvin_lecture06
 
Линейная алгебра - II
Линейная алгебра - IIЛинейная алгебра - II
Линейная алгебра - II
 

Más de student_kai

презентация
презентацияпрезентация
презентацияstudent_kai
 
презентации продолжение банкета
презентации продолжение банкетапрезентации продолжение банкета
презентации продолжение банкетаstudent_kai
 
основы программирования на языке C
основы программирования на языке Cосновы программирования на языке C
основы программирования на языке Cstudent_kai
 
презентация курсовой работы
презентация курсовой работыпрезентация курсовой работы
презентация курсовой работыstudent_kai
 
лекция№34
лекция№34лекция№34
лекция№34student_kai
 
лекция№32
лекция№32лекция№32
лекция№32student_kai
 
лекция№33
лекция№33лекция№33
лекция№33student_kai
 
лекция№31
лекция№31лекция№31
лекция№31student_kai
 
лекция№30
лекция№30лекция№30
лекция№30student_kai
 
лекция№29
лекция№29лекция№29
лекция№29student_kai
 
лекция№28
лекция№28лекция№28
лекция№28student_kai
 
лекция№27
лекция№27лекция№27
лекция№27student_kai
 
лекция№26
лекция№26лекция№26
лекция№26student_kai
 
лекция№25
лекция№25лекция№25
лекция№25student_kai
 
лекция№25
лекция№25лекция№25
лекция№25student_kai
 
лекция№24
лекция№24лекция№24
лекция№24student_kai
 
лекция№23
лекция№23лекция№23
лекция№23student_kai
 
лекция№22
лекция№22лекция№22
лекция№22student_kai
 
лекция№21
лекция№21лекция№21
лекция№21student_kai
 
лекция№20
лекция№20лекция№20
лекция№20student_kai
 

Más de student_kai (20)

презентация
презентацияпрезентация
презентация
 
презентации продолжение банкета
презентации продолжение банкетапрезентации продолжение банкета
презентации продолжение банкета
 
основы программирования на языке C
основы программирования на языке Cосновы программирования на языке C
основы программирования на языке C
 
презентация курсовой работы
презентация курсовой работыпрезентация курсовой работы
презентация курсовой работы
 
лекция№34
лекция№34лекция№34
лекция№34
 
лекция№32
лекция№32лекция№32
лекция№32
 
лекция№33
лекция№33лекция№33
лекция№33
 
лекция№31
лекция№31лекция№31
лекция№31
 
лекция№30
лекция№30лекция№30
лекция№30
 
лекция№29
лекция№29лекция№29
лекция№29
 
лекция№28
лекция№28лекция№28
лекция№28
 
лекция№27
лекция№27лекция№27
лекция№27
 
лекция№26
лекция№26лекция№26
лекция№26
 
лекция№25
лекция№25лекция№25
лекция№25
 
лекция№25
лекция№25лекция№25
лекция№25
 
лекция№24
лекция№24лекция№24
лекция№24
 
лекция№23
лекция№23лекция№23
лекция№23
 
лекция№22
лекция№22лекция№22
лекция№22
 
лекция№21
лекция№21лекция№21
лекция№21
 
лекция№20
лекция№20лекция№20
лекция№20
 

практика 14

  • 1. Практическое занятие 14. Поиск кратчайшего пути 1. 2. 3. 4. Теоретические сведения Контрольные вопросы Указания по выполнению заданий Задания
  • 2. Теоретические сведения В задаче о кратчайшем пути задается взвешенный ориентированный граф G = (V, Е) с весовой функцией w: Е → R, отображающей ребра на их веса, значения которых выражаются действительными числами. Вес пути p = (v0, v1,..., vN) равен суммарному весу входящих в него ребер: N w( p ) = w(vi −, vi ) ∑ 1 i= 1 Вес кратчайшего пути из вершины u в вершину v определяется соотношением { } p min w( p ) : u  → если имеется путь от u к v,  v  δ(u , v) =  ∞ в противном случае.  Тогда по определению кратчайший путь из вершины u в вершину v – это любой путь, вес которого удовлетворяет соотношению w(р) = δ(u, v).
  • 3. Теоретические сведения Рассмотрим алгоритмы решения задачи о кратчайшем пути из одной вершины, в которой для заданного графа G = (V, Е) требуется найти кратчайший путь, который начинается в определенной исходной вершине s ∈ V (для краткости будем именовать ее истоком) и заканчивается в каждой из вершин v ∈ V. Во всех описанных далее алгоритмах предполагается, что ориентированный граф G хранится в виде списков смежных вершин. Кроме того, вместе с каждым ребром хранится его вес, так что при просмотре каждого списка смежности вес каждого из его ребер можно определить в течение времени O(1). В некоторых алгоритмах поиска кратчайшего пути (например, в алгоритме Дейкстры) используется метод релаксации, или ослабления. Для каждой вершины v ∈ V поддерживается атрибут d[v], представляющий собой верхнюю границу веса, которым обладает кратчайший путь из истока s в вершину v. Назовем атрибут d[v] оценкой кратчайшего пути. Инициализация оценок кратчайших путей и предшественников производится в приведенной ниже процедуре, время работы которой равно Θ(V):
  • 4. Теоретические сведения Initialize_Single_Source(G, s) 1. for (для) каждой вершины v ∈ V[G] 2. do d[v] ← ∞ 3. π[v] ← NIL 4. d[s] ← 0 После инициализации для всех v ∈ V π[v] = NIL, d[s] = 0 и для всех v ∈ V – {s} d[v] = ∞. Процесс ослабления ребра (u, v) заключается в проверке, нельзя ли улучшить найденный до сих пор кратчайший путь к вершине v, проведя его через вершину u, а также в обновлении атрибутов d[v] и π[v] при наличии такой возможности улучшения. Ослабление может уменьшить оценку кратчайшего пути d[v] и обновить поле π[v] вершины v. Приведенный ниже код выполняет ослабление ребра (u, v):
  • 5. Теоретические сведения Relax(u, v, w) 1. if d[v] > d[u] + w(u, v) 2. then d[v] ← d[u) + w(u, v) 3. π[v] ← u Пример 1. Алгоритм Дейкстры. Алгоритм Дейкстры решает задачу о кратчайшем пути из одной вершины во взвешенном ориентированном графе G = (V, Е) в том случае, когда веса ребер неотрицательны, т.е. для всех ребер (u, v) ∈ Е выполняется неравенство w(u, v) ≥ 0. Dijkstra(G, w, s) 1. Initialize_Single_Source(G, s) 2. S ← ∅ 3. Q ← V[G] 4. while Q ≠ 0 5. do u ← Extract_Min(Q) 6. S ← S ∪ {u} 7. for (для) каждой вершины v ∈ Adj[u] 8. do Relax(u, v, w)
  • 6. Теоретические сведения В алгоритме Дейкстры поддерживается множество вершин S, для которых уже вычислены окончательные веса кратчайших путей к ним из истока s. В этом алгоритме поочередно выбирается вершина u ∈ V – S, которой на данном этапе соответствует минимальная оценка кратчайшего пути. После добавления этой вершины u в множество S производится ослабление всех исходящих из нее ребер. По завершении обработки алгоритмом Дейкстры взвешенного ориентированного графа G = (V, Е) с неотрицательной весовой функцией w и истоком s для всех вершин u ∈ V выполняется равенство d[u] = δ(s, u). В приведенной реализации алгоритма Дейкстры используется неубывающая очередь с приоритетами Q, состоящая из вершин, в роли ключей для которых выступают значения d. Очередь с приоритетами – это структура данных, предназначенная для обслуживания множества S, с каждым элементом которого связано определенное значение, называющееся ключом (key). В неубывающей очереди с приоритетами поддерживаются следующие операции.
  • 7. Теоретические сведения • Операция Insert(S, x) вставляет элемент x в множество S. Эту операцию можно записать как S ← S ∪ {x}. • Операция Minimum(S) возвращает элемент множества S с наименьшим ключом. • Операция Extract_Min(S) возвращает элемент с наименьшим ключом, удаляя его при этом из множества S. • Операция Decrease_Key(S, x, k) уменьшает значение ключа, соответствующего элементу x, путем его замены ключом со значением k. Предполагается, что величина k не больше текущего ключа элемента x. Пример 2. Алгоритм Флойда-Уоршалла. Будем считать, что весовая функция w задана в виде матрицы W. Floyd_Warshall(W) 1. n ← rows[W] 2. D(0) ← W 3. for k ← 1 to n 4. do for i ← 1 to n 5. do for j ← 1 to n 6. do 7. return D(n)
  • 8. Теоретические сведения В алгоритме Флойда-Уоршалла рассматриваются промежуточные вершины кратчайшего пути. Промежуточной вершиной простого пути p = (v1, v2, …, vN) называется произвольная вершина, отличная от v1 и vN, т.е. это любая вершина из множества {v2, v3,..., vN – 1}. Для построения кратчайших путей в алгоритме ФлойдаУоршалла нужно на основе матрицы D, содержащей веса кратчайших путей, вычислить матрицу предшествования П = (πij). Если задана матрица предшествования П, то вывести вершины на указанном кратчайшем пути можно с помощью процедуры Print_All_Pairs_Shortest_Path. Print_All_Pairs_Shortest_Path(II, i, j) 1. if i = j 2. then print i 3. else if πij = NIL 4. then print "He существует пути из" i "в" j 5. else Print_All_Pairs_Shortest_Path(II, i, πij) 6. print j
  • 9. Теоретические сведения Для получения матрицу предшествования П нужно вычислить последовательность матриц П(0), П(1), ..., П(n), где П(n) = П, а элемент определяется как предшественник вершины j на кратчайшем пути из вершины i, все промежуточные вершины которого принадлежат множеству {1, 2, ..., k}. Можно дать следующее рекурсивное определение величины . Если k = 0, то ,  NIL если i = j или wij =∞ i если i ≠ j и wij <∞ .   ( πij0) = При k ≥ 1 ( πijk ) ( 1 ( 1 (k 1  ijk − ) если d ijk − ) ≤d ikk − ) +d kj − ) , π( 1  = ( ( ( π( k −1) если d ijk −1) >d ikk −1) +d kjk −1) .  kj 
  • 10. Контрольные вопросы 1. 2. 3. 4. 5. 6. 7. 8. 9. Вес пути. Вес кратчайшего пути. Постановка задачи поиска кратчайшего пути. Метод релаксации. Алгоритм Дейкстры. Неубывающая очередь с приоритетами. Операции над очередью с приоритетами. Алгоритм Флойда-Уоршалла. Вычисление матрицы предшествования в алгоритме Флойда-Уоршалла. 10. Вывод кратчайших путей по матрице предшествования.
  • 11. Указания по выполнению заданий 1. 2. 3. 4. Получить задание Получить решение задачи. Подготовить отчет по выполнению задания. Отчет должен включать задание и описание этапов выполнения задания. Ответить на вопросы по выполнению задания и контрольные вопросы
  • 12. Задания 1. Выполнить анализ сложности алгоритма Дейкстры. 2. Дополнить алгоритм Дейкстры выводом кратчайшего пути из истока. 3. Описать алгоритм Дейкстры на языке высокого уровня (например, на языке C). 4. Выполнить анализ сложности алгоритма ФлойдаУоршалла. 5. Описать алгоритм Флойда-Уоршалла на языке высокого уровня (например, на языке C). 6. Разработать алгоритм поиска кратчайшего пути на основе какого-либо из алгоритмов обхода графа. Выполнить анализ сложности и сравнить с алгоритмами Дейкстры и Флойда-Уоршалла. 7. Модифицировать приведенные алгоритмы для случая отрицательных весов.