- •Министерство образования и науки украины
- •Дискретная математика
- •0915 - “Компьютерная инженерия”
- •Содержание
- •Введение
- •Операции алгебры множеств
- •Теоретические сведения
- •Операция объединение множеств
- •Операция пересечение множеств
- •Операция разность множеств
- •Операция симметрическая разность множеств
- •Универсум
- •Дополнение множества
- •Множество всех подмножеств (булеан)
- •Логические функции и реляционные операторы
- •Основные орпределения
- •Теоретические сведения
- •Табличный способ задания логической функции
- •Матричный способ представления
- •Графический способ представления
- •Аналитический способ представления
- •Переход от табличной формы к аналитической
- •Минимизация функций методом Квайна – Мак-Класки
- •Минимизация логических функций методом Петрика
- •Переход от алгебры Буля к алгебре Жегалкина
- •Реляционный оператор Select (выборка)
- •Реляционный оператор Project (проекция)
- •Алгоритмы на графах
- •Теоретические сведения
- •Задача о кратчайшем пути
- •Алгоритм Дейкстры нахождения кратчайшего пути в графе
- •Пример решения задачи нахождения кратчайшего пути
- •Задача нахождения наибольшего потока
- •Алгоритм Форда и Фалкерсона нахождения максимального потока транспортной сети
- •Пример нахождения максимального потока
- •Транспортная задача по критерию стоимости
- •Алгоритм метода частичных потоков
- •Пример решения транспортной задачи по критерию стоимости
- •Алгоритм Флёри нахождения эйлерова цикла
- •Пример решения задачи о коммивояжёре
- •Алгоритм Краскала нахождения остова минимального веса
- •Кодирование информации
- •6. Исправление ошибок в линейном систематическом коде.
- •7. Исправление ошибок в коде Хэмминга.
- •8. Исправление ошибок в циклическом коде.
- •Основные определения
- •Теоретические сведения
- •Построение онк по методике Шеннона-Фано
- •Построение онк по методике Хаффмена
- •Построение линейного систематического кода
- •Исправление ошибок в линейном систематическом коде
- •Построение кода Хємминга
- •Исправление ошибок в коде Хэмминга
- •Построение циклического кода
- •Исправление ошибок в циклическом коде
- •Алгоритмы теории чисел
- •Теоретические сведения
- •Вычисление степени числа а по модулю n
- •Алгоритм Евклида для нахождения наибольшего общего делителя
- •Вычисление обратных величин
- •Основные способы нахождения обратных величин
- •Расширенный алгоритм Евклида
- •Китайская теорема об остатках
Теоретические сведения
Задача о кратчайшем пути
Формулировка задачи:
В ориентированном взвешенном графе G = (X,U) найти кратчайший путь из начальной вершины s в конечную вершину t.
Считаем, что отсутствующие в графе дуги имеют вес равный ∞ (максимальное целое число).
Для
графа с неотрицательными весами дуг,
т.е.
,
один из алгоритмов нахождении кратчайшего
пути предложил Е. Дейкстра в 1959г.
На
каждой итерации этого алгоритма всякая
вершина
графа
получает метку
,
которая может быть постоянной либо
временной. В первом случае
- вес кратчайшего
-пути.
Если метка
- временная, то
- вес кратчайшего
-
пути, проходящего только через вершины
с постоянными метками. Временная метка
является оценкой сверху для веса
кратчайшего
-пути,
и став на некоторой итерации постоянной,
она остаётся такой до конца работы
алгоритма.
Кроме
,
с каждой вершиной
графа
,
за исключением
,
связывается ещё одна метка -
.
На каждой итерации
является номером вершины, предшествующей
в
-
пути, имеющем минимальный вес среди
всех
-
путей, проходящих через вершины
получивших к данному моменту постоянные
метки. После того, как вершина
получила постоянную метку, с помощью
меток
легко указать последовательность
вершин, составляющих кротчайший
- путь.
Перед
началом первой итерации алгоритма
вершина
имеет постоянную метку
,
а метки
всех остальных вершин равны
и эти метки временные. Общая итерация
алгоритма состоит в следующем. Пусть
- вершина, получившая постоянную метку
на предыдущей итерации. Просматриваем
все вершины
, имеющие временные метки, с целью
уменьшения этих меток. Метка
вершины
заменяется на
,
если оказалось, что
.
В этом случае говорим, что вершина
получила свою метку
из вершины
,
и полагаем
.
Если же
,
то метки
и
вершины
не изменяются на данной итерации.
Алгоритм заканчивает работу, когда
метка
становится постоянной.
- вес кротчайшего
- пути, который будем обозначать через
.
Этот путь определяется с помощью меток
так:
.
Будем считать, что граф задан матрицей весов либо списками смежности.
Алгоритм Дейкстры нахождения кратчайшего пути в графе
Положить
и считать эту метку постоянной. Положить
для всех
,
и считать эти метки временными. Положить
.Для всех с временными метками выполнить:
если
,
то
и
.
Иначе и не менять.
Пусть
-
множество вершин с временными метками
.
Найти вершину
такую, что
.
Считать метку
постоянной меткой вершины
.Положить
.
Если
,
то перейти к пункту 5, иначе перейти к
пункту 2.
,
- кратчайший путь.
Пример решения задачи нахождения кратчайшего пути
В
простом взвешенном графе на рисунке
3.1 найти
кратчайший путь из
в
,
используя алгоритм Дейкстры.
x2 3 x4 6 x7
6 6 7 5
x0
4
x1
9 x8
3 x5 4 11
8 10
x3
7 x6
Рисунок 3.1 - Простой взвешенный граф
Таблица 3.1 - Последовательное изменение меток вершин
|
Метки |
||||||||
X0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
X1 |
|
4 |
4 |
4 |
4 |
4 |
4 |
4 |
4 |
X2 |
|
6 |
6 |
6 |
6 |
6 |
6 |
6 |
6 |
X3 |
|
8 |
7 |
7 |
7 |
7 |
7 |
7 |
7 |
X4 |
|
|
10 |
9 |
9 |
9 |
9 |
9 |
9 |
X5 |
|
|
|
13 |
13 |
13 |
13 |
13 |
13 |
X6 |
|
|
|
|
14 |
14 |
14 |
14 |
14 |
X7 |
|
|
|
|
|
15 |
15 |
15 |
15 |
X8 |
|
|
|
|
|
|
22 |
22 |
20 |
Таблица 3.2 - Последовательное изменение меток
|
Метки |
||||||
X1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
X2 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
X3 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
X4 |
|
1 |
2 |
2 |
2 |
2 |
2 |
X5 |
|
|
2 |
2 |
2 |
2 |
2 |
X6 |
|
|
|
3 |
3 |
3 |
3 |
X7 |
|
|
|
|
4 |
4 |
4 |
X8 |
|
|
|
|
|
5 |
7 |
Из таблиц 3.1 и 3.2 можно определить кратчайший путь и его длину.
Длину кратчайшего пути в таблице 3.1 определяем по постоянной метке, которую имеет конечная вершина: вершина имеет постоянную метку равную 20, значит длина кратчайшего пути l ( )=20.
Сам
кратчайший путь определяем из таблицы
4.2: метка последней вершины
указывает на индекс вершины предшествующей
ей и т.д. пока не дойдем до начальной
вершины. Вершины в обратном порядке
указывают кратчайший путь:
.
l=6 l=9 l=15
x2 3 x4 6 x7
6 6 7 5
x0 4 x1 9 x8
3 l=4 x5 l=13 4 11 l=20
8 10
x3 7 x6
l=7 l=14
Рисунок 3.2 - Окончательное распределение меток и кратчайший путь
