- •В. Д. Колдаев Лабораторный практикум по курсу « Структуры и алгоритмы обработки данных »
- •Часть 1
- •Лабораторная работа № 1 « Методы сортировки »
- •Теоретические сведения
- •Методы сортировки
- •Сортировка вставкой
- •Сортировка обменом
- •Сортировка Шелла
- •Быстрая сортировка (сортировка Хоара)
- •Сортировка в нелинейных структурах
- •Турнирная сортировка
- •Пирамидальная сортировка
- •Функция сложности алгоритма
- •Лабораторное задание
- •Методика выполнения лабораторной работы
- •Основные функции системы
- •Варианты заданий
- •Лабораторная работа №2 «Методы поиска».
- •Теоретические сведения
- •Методы поиска
- •Последовательный поиск.
- •Бинарный поиск.
- •Фибоначчиев поиск.
- •Интерполяционный поиск.
- •Поиск по бинарному дереву.
- •Поиск по бору.
- •Поиск хешированием.
- •Алгоритмы поиска словесной информации
- •Алгоритм Бойера - Мура
- •Лабораторное задание
- •Методика выполнения лабораторной работы
- •Варианты заданий
- •Использовать алгоритмы Кнута - Морриса – Пратта, Бойера – Мура, Рабина для поиска текстовой информации. Лабораторная работа № 3 «итеративные и рекурсивные алгоритмы»
- •Теоретические сведения
- •Рекурсивные структуры данных
- •Лабораторное задание
- •Требования к отчету
- •Контрольные вопросы
- •Литература
- •Лабораторная работа № 4 «Алгоритмы построения остовного дерева сети».
- •Теоретические сведения
- •Лабораторное задание
- •Литература
- •Задание : Построить остовное дерево графа методами Крускала и Прима.
- •Решить задачи
- •Лабораторная работа № 5. Алгоритмы нахождения на графах кратчайших путей.
- •Теоретические сведения
- •Метод динамического программирования.
- •Метод Дейкстры
- •Алгоритм Флойда
- •Алгоритм Йена
- •Литература
- •Лабораторное задание.
- •Варианты заданий
- •Задание 2: Найти кратчайший путь между тремя парами вершин методом Дейкстры
- •Решить задачи
- •Составить программу для нахождения кратчайшего пути
- •Лабораторная работа № 6 « Эвристические алгоритмы »
- •Теоретические сведения
- •Волновой алгоритм.
- •Двухлучевой алгоритм.
- •Пример 2. Осуществить трассировку элементов а и в .
- •Четырехлучевой алгоритм.
- •Маршрутный алгоритм.
- •Геометрическая модель задачи о лабиринте
- •Алгоритмы составления расписания.
- •Литература
- •Лабораторное задание.
- •Решить задачи
Лабораторная работа № 5. Алгоритмы нахождения на графах кратчайших путей.
Цель работы: изучение некоторых алгоритмов нахождения на графах кратчайших путей; исследование эффективности этих алгоритмов.
Продолжительность работы– 2 часа.
Теоретические сведения
Задача отыскания в графе (как ориентированном, так и неориентированном) кратчайшего пути имеет многочисленные практические приложения. С решением подобной задачи приходится встречаться в технике связи (например, при телефонизации населенных пунктов), на транспорте (при выборе оптимальных маршрутов доставки грузов), в микроэлектронике (при проектировании топологии микросхем) и т.д.
Путь между вершинами iиjграфа считается кратчайшим, если вершиныiиjсоединены минимальным числом ребер (случай не взвешенного графа) или если сумма весов ребер, соединяющих вершиныiиj, минимальна (для взвешенного графа).
В настоящее время известны десятки алгоритмов решения поставленной задачи.
Важным показателем алгоритма является его эффективность. Применительно к поставленной задаче эффективность алгоритма может зависеть в основном от двух параметров графа: число его вершин и число весов его ребер. В данной лабораторной работе для определения кратчайшего расстояния между вершинами графа исследуются два алгоритма: метод динамического программирования и метод Дейкстры.
Метод динамического программирования.
Метод рассматривает многостадийные процессы принятия решения. При постановке задачи динамического программирования формируется некоторый критерий. Процесс разбивается на стадии (шаги), в которых принимаются решения, приводящие к достижению общей поставленной цели. Таким образом, метод динамического программирования - метод пошаговой оптимизации.
Введем функцию fi, определяющую минимальную длину пути из начальной в вершину i. Обозначим черезSi jдлину пути между вершинамиiиj, аfj- наименьшую длину пути между вершинойjи начальной вершиной.
Выбирая в качестве iтакую вершину, которая минимизирует сумму (Si j + fj) , получаем уравнение
fi = min {Si j + fj}
Трудность решения данного уравнения заключается в том, что неизвестная функция входит в обе части равенства. В такой ситуации приходится прибегать к классическому методу последовательных приближений( итераций), используя рекуррентную формулу:
fi(k+1) = min {Si j + fj(k)} ,
где fj(k) - k-е приближение функции.
Возможен другой подход к решению поставленной задачи с помощью метода стратегий. При движении из начальной точки iв конечнуюkполучается приближениеfi(0) =Sik,гдеSik- длина пути между точкамиiиk. Следующее приближение – поиск решения в классе двухзвенных ломаных. Дальнейшие приближения ищутся в классе трехзвенных, четырехзвенных и других ломаных.
Пример 1.Определить кратчайший путь из вершины 1 в вершину 10 для графа, представленного на рис. 1.
Рис.1. Взвешенный ориентированный граф
Начальные условия: f1= 0,S11= 0.
Находим последовательно значения функции fi(в условных единицах) для каждой вершины ориентированного графа:
f2 = min{S21 + f1} = {3 + f1} = {3 + 0} = 3;
f3 = min{S31 + f1} = {4 + f1} = {4 + 0} = 4;
f4 = min{S41 + f1} = {2 + f1} = {2 + 0} = 2;
S64 + f4 2 + 2
f6 = min S63 + f3 = min 6 + 4 = 4;
S62 + f2 3 + 3
S54 + f4 5 + 2
f5 = min = min = 5;
S56 + f6 1 + 4
S75 + f5 6 + 5
f7 = min = min = 11;
S55 + f6 8 + 4
f9 = min {S85 + f5} = min = {12 + 5} = 17;
S86 + f6 7 + 4
f8 = min S89 + f9 = min 6+17 = 11;
S10,7 + f4 4 + 11
f10 = min S10,8 + f8 = min 3 + 11 = 14.
S10,9 + f10 11 + 17
Длина кратчайшего пути составляет 14 условных единиц. Для выбора оптимальной траектории движения следует осуществить просмотр функций fi в обратном порядке, то есть с f10. Пусть fi= f10. В данном случае
4 + f1 4 + 11
f10 = min 3 + f8 = min 3 + 11 = 14.
11 + f9 11 + 17
Получаем, что (3 + f8) = 14, то естьfj=f8. Значит, из вершины 10 следует перейти к вершине 8. Имеемfi=f8. Рассмотрим функцию
7 + f6 7 + 4
f8 = min = min = 11,
6 + f9 6 + 17
то есть fj=f6и т.д.
Таким образом, получаем кратчайший путь от вершины 1 к вершине 10:
(1, 4, 6, 8, 10)
Рассмотренный метод определения кратчайшего пути может быть распространен и на неориентированные графы.
Пример 2.Для графа (рис. 1) найти кратчайший путь от вершины 1 до вершины 10, рассматривая граф как неориентированный. Матрица смежности весов графа в этом случае имеет вид:
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
1 |
- |
3 |
4 |
2 |
- |
- |
- |
- |
- |
- |
2 |
3 |
- |
- |
- |
- |
3 |
- |
- |
- |
- |
3 |
4 |
- |
- |
- |
- |
6 |
- |
- |
- |
- |
4 |
2 |
- |
- |
- |
5 |
2 |
- |
- |
- |
- |
5 |
- |
- |
- |
5 |
- |
1 |
6 |
- |
12 |
- |
6 |
- |
3 |
6 |
2 |
1 |
- |
8 |
7 |
- |
- |
7 |
- |
- |
- |
- |
6 |
8 |
- |
- |
- |
4 |
8 |
- |
- |
- |
- |
- |
7 |
- |
- |
6 |
3 |
9 |
- |
- |
- |
- |
12 |
- |
- |
6 |
- |
11 |
10 |
- |
- |
- |
- |
- |
- |
4 |
3 |
11 |
- |
Записываем выражения для функции fi
f1 +3 f1 + 4 f1 + 2
f1 = 0; f2 = min ; f3 = min ; f4 = min f5 + 5
f6 + 3 f6 + 6 f6 + 2
f2 + 3
f4 + 5 f3 + 6
f6 + 1 f4 + 2 f5 + 6
f5 = min ; f6 = min ; f7 = min
f9 +12 f5 + 1 f6 + 8
f7 + 6 f7 + 8
f8 + 7
f7 + 4
f6 + 7 f5 + 12
f8 = min ; f9 = min ; f10 = min f8 + 3 .
f9 + 6 f8 + 6
f9 + 11
Указанные целевые функции , представляют собой систему линейных алгебраических уравнений (в примере имеется 10 уравнений и 10 неизвестных).
Рассмотрим один из вариантов ее решения, учитывая, что f1= 0 .
Тогда имеем:
2
f2 = 3; f3 = 4; f4 = min f5 + 5 = 2;
f6 + 2
6
7 10
f6 + 1 7 4 4
f5 = min f9 +12 = min ; f6 = min f5 +1 = min = 4
f7 + 6 f6 + 1 f7 + 1 f5 + 1
f8 + 7
Подставив выражение для f6в f5, получим
7
f5 = min 4 + 1 = 5.
f5 + 1 + 1
Тогда
11 17 15
f7 = 11; f8 = min ; f9 = min ; f10 = min f8 + 3 .
f9 + 6 f8 + 6 f9 + 11
Подставляя f9в f8, получаем
11
f8 = min 17 + 6 = 11.
f8 + 6 + 6
Окончательно имеем: f9= 17;f10= 14.