- •Лабораторный практикум по курсу « Структуры и алгоритмы обработки данных » Оглавление
- •20 Методика выполнения лабораторной работы 28
- •30 Лабораторное задание 45
- •47 Решение задач 72
- •1. Лабораторная работа - Методы сортировки
- •Теоретические сведения
- •Сортировка выбором
- •Сортировка вставкой
- •Сортировка обменом
- •Сортировка Шелла
- •Быстрая сортировка (сортировка Хоара)
- •Сортировка в нелинейных структурах
- •Турнирная сортировка
- •Пирамидальная сортировка
- •Функция сложности алгоритма
- •Лабораторное задание
- •Методика выполнения лабораторной работы
- •Пояснения к выполнению работы.
- •Лабораторная работа -Методы поиска
- •Теоретические сведения
- •Последовательный поиск.
- •Бинарный поиск.
- •Фибоначчиев поиск.
- •Интерполяционный поиск.
- •Поиск по бинарному дереву.
- •Поиск по сбалансированному дереву.
- •Поиск по бору
- •Поиск хешированием
- •Алгоритмы поиска словесной информации
- •Алгоритм Кнута - Морриса - Пратта
- •Алгоритм Бойера - Мура
- •Алгоритм Рабина
- •Лабораторное задание
- •Методика выполнения лабораторной работы
- •Лабораторная работа -Итеративные и рекурсивные алгоритмы
- •Теоретические сведения
- •Итеративный алгоритм.
- •Итеративное вычисление факториала
- •Рекурсивное вычисление факториала
- •Рекурсивные структуры данных
- •Формирование бинарного дерева
- •Рекурсивная процедура обхода узлов дерева сверху-вниз
- •Лабораторное задание
- •Требования к отчету
- •Контрольные вопросы
- •Литература
- •Лабораторная работа - Алгоритмы построения остовного дерева сети
- •Теоретические сведения
- •Алгоритмы Крускала и Прима
- •Пример со схемой микрорайона
- •Пример со схемой компьютерной сети
- •Лабораторное задание
- •Требования к отчёту
- •Литература
- •Задание к лабораторной работе 4
- •Решение задач
- •Лабораторная работа - Алгоритмы нахождения на графах кратчайших путей
- •Теоретические сведения
- •Метод динамического программирования.
- •Пример определения кратчайшего пути №1
- •Пример нахождения кратчайшего пути при условии, что граф неориентированный№2
- •Метод Дейкстры
- •Алгоритм Флойда
- •Алгоритм Йена
- •Алгоритм Беллмана- Форда
- •Литература
- •Лабораторное задание.
- •Требования к отчету
- •Варианты заданий
- •Задание 1: Найти кратчайший путь на графе между тремя парами вершин методом динамического программирования
- •Задание 2: Найти кратчайший путь между тремя парами вершин методом Дейкстры
- •Решение задач
- •Задание на разработку программы
- •Лабораторная работа -Эвристические алгоритмы
- •Теоретические сведения
- •Волновой алгоритм
- •Двухлучевой алгоритм.
- •Пример 2. Осуществить трассировку элементов а и в .
- •Четырехлучевой алгоритм
- •Маршрутный алгоритм.
- •Геометрическая модель задачи о лабиринте
- •Алгоритмы составления расписания.
- •Литература
- •Лабораторное задание.
- •Требования к отчету
- •Решение задач
-
Метод Дейкстры
Алгоритм Дейкстры предназначен для нахождения кратчайшего пути между вершинами в неориентированном графе. Идея алгоритма следующая, сначала выберем путь до начальной вершины равным нулю, и заносим эту вершину во множество уже выбранных, расстояние от которых до оставшихся невыбранных вершин определено. На каждом следующем этапе находим следующую невыбранную вершину, расстояние до которой наименьшее и соединённую ребром с какой-нибудь вершиной из множества выбранных (это расстояние будет равно расстоянию до уже выбранной вершины плюс длина ребра).
Найти кратчайший путь на графе от вершины L до вершины D (рис.2).
Рис.2. Взвешенный неориентированный граф
Запишем алгоритм в виде последовательности шагов.
Шаг 1. Определяются расстояния от начальной вершины L до всех остальных .
Длина пути до выбранной вершины |
Выбранная вершина |
Невыбранные вершины |
||||||||
B |
G |
N |
R |
D |
S |
M |
A |
|||
0 |
L |
7 |
∞ |
10 |
∞ |
∞ |
∞ |
∞ |
∞ |
|
7 |
B |
|
Шаг 2. Выбираем наименьшее расстояние от L до B, найденная вершина В прини-
мается за вновь выбранную. Найденное наименьшее расстояние добавляется к длинам ребер
от новой вершины В до всех остальных. Выбирается минимальное расстояние от В до N. Новая вершина N принимается за выбранную.
Длина пути до выбранной вершины |
Выбранная вершина |
Невыбранные вершины |
||||||||
B |
G |
N |
R |
D |
S |
M |
A |
|||
0 |
L |
7 |
∞ |
10 |
∞ |
∞ |
∞ |
∞ |
∞ |
|
7 |
B |
∞ |
16 |
10 |
∞ |
∞ |
∞ |
∞ |
34 |
|
10 |
N |
|
Для наглядности в дальнейшем вместо знака ∞ будем ставить знак “-“.
Шаг 3. Определяются расстояния от вершины N до всех оставшихся (за исключением
L и B) .
Длина пути до выбранной вершины |
Выбранная вершина
|
Невыбранные вершины |
||||||||
B |
G |
N |
R |
D |
S |
M |
A |
|||
0 |
L |
7 |
∞ |
10 |
∞ |
∞ |
∞ |
∞ |
∞ |
|
7 |
B |
∞ |
16 |
10 |
∞ |
∞ |
∞ |
∞ |
34 |
|
10 |
N |
∞ |
16 |
∞ |
41 |
∞ |
∞ |
∞ |
34 |
|
16 |
G |
|
Расстояние от вершины L через вершину N до вершины G равно 18. Это расстояние
больше, чем расстояние LB+BG= 16, поэтому оно не учитывается в дальнейшем.
Продолжая аналогичные построения, построим таблицу. Таким образом, найдена
длина кратчайшего пути между вершинами L и D (44 условных единицы).
Траектория пути определяется следующим образом.
Осуществляем обратный просмотр от конечной вершины к начальной.
Просматриваем столбец, соответствующий вершине, снизу вверх и фиксируем первое появление минимальной величины. В столбце, соответствующем вершине D, впервые минимальная длина 44 появилась снизу в четвертой строке. В этой строке указана вершина S, к которой следует перейти, то есть следующим нужно рассматривать столбец, соответствующий вершине S.
Длина пути до выбранной вершины |
Выбранная вершина
|
Невыбранные вершины |
|||||||
B |
G |
N |
R |
D |
S |
M |
A |
||
0 |
L |
7 |
- |
10 |
- |
- |
- |
- |
- |
7 |
B |
- |
16 |
10 |
- |
- |
- |
- |
34 |
10 |
N |
- |
16 |
- |
41 |
- |
- |
- |
34 |
16 |
G |
- |
- |
- |
41 |
- |
16+11= =27 |
- |
34 |
27 |
S |
- |
- |
- |
41 |
27+17= =44 |
- |
27+15= =42 |
34 |
34 |
A |
- |
- |
- |
41 |
44 |
- |
42 [34+15] |
- |
41 |
R |
- |
- |
- |
- |
44 [41+32] |
- |
42 |
- |
42 |
M |
- |
- |
- |
- |
44 [42+21] |
- |
- |
- |
Min
В этом столбце минимальная длина, равная 27, указывает следующую вершину G,
к которой следует перейти, и т.д. Таким образом, получаем траекторию пути:
( L, B, G, S, D ).