- •Министерство образования и науки рф
- •Введение.
- •Пусть теперь известно, что должен100 рублей,должен200 рублей,должен100 рублейдолжен300 рублей,должен200 рублей. Тогда эту информацию также можно выразить в виде графа:
- •Глава I. Перечислительная комбинаторика.
- •Перестановки, размещения, сочетания и разбиения.
- •Полиномиальная формула и бином Ньютона.
- •Формула включения и исключения.
- •1.4. Приложения к теории вероятностей.
- •1.5. Производящие функции и рекуррентные соотношения.
- •1.6. Перечисление классов эквивалентности. Лемма Бернсайда и теорема Пойа.
- •Задачи для самостоятельного решения
- •Глава II. Булевы функции.
- •2.1. Определение и интерпретация.
- •2.2. Дизъюнктивная и конъюнктивная нормальные формы. Единичный n-мерный куб.
- •(Заметим, что ввиду фиксированного порядка двоичных наборов булева функция
- •2.3. Полные системы функций. Теорема Поста.
- •2.4. Пороговые функции.
- •Глава II. Графы и алгоритмы.
- •2.1. Основные понятия теории графов.
- •2.2. Алгоритмы в дискретной математике.
- •2.3. Минимальное остовное дерево.
- •2.4. Кратчайший путь между двумя вершинами.
- •2.5. Задача коммивояжера. Метод «ветвей и границ».
- •2.6. Паросочетания в двудольных графах.
- •2.7. Потоки в сетях.
- •Глава III. Кодирование
- •3.1. Основные задачи теории кодирования.
- •3.2. Помехоустойчивое кодирование.
- •Криптография.
- •Согласно Малой теореме Ферма в поле для любогоимеем.
- •Рекомендуемая литература
2.4. Кратчайший путь между двумя вершинами.
Пусть
задан взвешенный ориентированный граф
,
неотрицательные веса
на дугах которого будем интерпретировать
как расстояния от вершины
до вершины
.
Длиной пути называется сумма длин
составляющих путь дуг. Требуется найти
кратчайший путь из вершины
в вершину
.
Алгоритм Дейкстры для нахождения кратчайшего пути (Dijkstra, 1959).
В
процессе работы алгоритма каждая вершина
имеет метку, которая может быть временной
или постоянной
.
Временная метка
есть длина некоторого пути из
в
,
возможно не оптимального. В процессе
работы алгоритма временные метки могут
изменяться, уменьшаясь, когда удается
найти более короткий путь. На каждом
шаге алгоритма вершина
,
имеющая минимальную временную метку
получает постоянную метку
.
Постоянная метка
есть длина кратчайшего пути из
в
,
в дальнейшем она не меняется.
В
начальный момент вершина
имеет постоянную метку
,
а все остальные вершины графа – временные
метки
.
На первом шаге алгоритма каждая вершина
, для которой существует дуга
,
получает временную метку
(помечается из вершины
).
Затем вершина
,
для которой
имеет минимальное значение, получает
постоянную метку
(если минимум достигается на нескольких
вершинах, то берется любая из них).
Кратчайший путь из
в
проходит по ребру
.
На
втором шаге алгоритма для каждой вершины
,
которая имеет временную метку и для
которой существует дуга
,
вычисляется сумма
и, если эта сумма меньше, чем
,
то вершина
получает новую временную метку
![]()
(помечается
из вершины
).
Затем
среди всех вершин, имеющих временные
метки, находится вершина
,
для которой
имеет минимальное значение, и её временная
метка делается её постоянной меткой
.
Пусть
- вершина, получившая на (
)
– ом шаге постоянную метку. Тогда на
– ом шаге алгоритма для каждой вершины
с временной меткой, для которой существует
дуга
,
вычисляется сумма
и, если эта сумма меньше чем
,
то вершинаv
получает новую временную метку
![]()
(помечается
из вершины
).
Затем среди всех вершин, имеющих временные
метки, выбирается вершина
с минимальной временной меткой и
полагается
.
Алгоритм
заканчивает работу, когда вершина
получает постоянную метку
.
Эта метка равна кратчайшему пути из
в
.
Чтобы восстановить этот путь, нужно
найти вершину, из которой была помечена
вершина
,
затем вершину, из которой была помечена
та вершина, и т.д., пока не дойдем до
вершины
.
Тогда последовательность этих же вершин
в обратном порядке и определит искомый
кратчайший путь. Докажем это индукцией
по числу шагов
.
Для
вершины
постоянная метка
есть, очевидно, длина кратчайшего пути
изx
в
.
Пусть после (
)
– го шага множество вершин, имеющих
постоянные метки, есть
и длины кратчайших путей отx
до этих вершин совпадают с их постоянными
метками
,
,
,…,
.
Пусть наk-
том шаге вершина
,
имевшая к этому моменту временную метку
,
полученную из некоторой вершины
,
получает постоянную метку
.
Покажем, что
есть длина кратчайшего пути из х в
.
Допустим противное, что длина кратчайшего
из х в
меньше, чем
.
Тогда кратчайший путь не может проходить
только через вершины множества
,
т.к. в этом случае вершина
имела бы передk
– ым шагом метку, полученную не из
вершины
,
а из другой вершины, а именно, из вершины,
предшествующей
на кратчайшем пути. С другой стороны,
этот путь не может проходить и через
вершины, не принадлежащие
,
т.к. первая такая вершина на кратчайшем
пути должна была бы получить постоянную
метку раньше вершины
.
Поэтому длина кратчайшего пути изx
в
обязана быть равной
.
Число
шагов
,
через которое вершина
получает постоянную метку
не может, разумеется, превысить
,
и на каждом шаге число просматриваемых
вершин также не превышает
.
Поэтому число операций алгоритма есть
.
Рассмотрим работу алгоритма на примере представленного на рисунке графа.

Работу алгоритма представим в виде таблицы, элемент на пересечении i – ой строки и j – го столбца которой есть метка j – ой вершины после i – го шага. В скобках около метки каждой вершины указано, из какой вершины она была помечена.
|
Вершины Шаги алгоритма |
X |
|
|
|
|
|
y |
|
0 |
0* |
|
|
|
|
|
|
|
1 |
0* |
|
|
|
|
|
|
|
2 |
0* |
|
|
|
|
|
|
|
3 |
0* |
|
|
|
|
|
|
|
4 |
0* |
|
|
|
|
|
|
|
5 |
0* |
|
|
|
|
|
|
|
6 |
0* |
|
|
|
|
|
|
Длина
кратчайшего пути из x
в y
равна 12. выписывая вершины, из которых
была помечена вершина
,
получаем
.
Инвертируя данную последовательность,
получаем кратчайший путь
.
Тест.
Если минимальное значение
достигается на нескольких вершинах,
то постоянную метку
получает а) вершина наибольшей
степени; б) вершина наименьшей
степени; в) любая вершина из
минимального множества.Трудоемкость алгоритма Дейкстры равна а)
;
б)
;
в)
.Вершины получают постоянные метки в порядке а) неубывания от x; б) невозрастания расстояния от х; в) порядок не является монотонным относительно расстояния.
