- •Лабораторный практикум по курсу « Структуры и алгоритмы обработки данных » Оглавление
- •20 Методика выполнения лабораторной работы 28
- •30 Лабораторное задание 45
- •47 Решение задач 72
- •1. Лабораторная работа - Методы сортировки
- •Теоретические сведения
- •Сортировка выбором
- •Сортировка вставкой
- •Сортировка обменом
- •Сортировка Шелла
- •Быстрая сортировка (сортировка Хоара)
- •Сортировка в нелинейных структурах
- •Турнирная сортировка
- •Пирамидальная сортировка
- •Функция сложности алгоритма
- •Лабораторное задание
- •Методика выполнения лабораторной работы
- •Пояснения к выполнению работы.
- •Лабораторная работа -Методы поиска
- •Теоретические сведения
- •Последовательный поиск.
- •Бинарный поиск.
- •Фибоначчиев поиск.
- •Интерполяционный поиск.
- •Поиск по бинарному дереву.
- •Поиск по сбалансированному дереву.
- •Поиск по бору
- •Поиск хешированием
- •Алгоритмы поиска словесной информации
- •Алгоритм Кнута - Морриса - Пратта
- •Алгоритм Бойера - Мура
- •Алгоритм Рабина
- •Лабораторное задание
- •Методика выполнения лабораторной работы
- •Лабораторная работа -Итеративные и рекурсивные алгоритмы
- •Теоретические сведения
- •Итеративный алгоритм.
- •Итеративное вычисление факториала
- •Рекурсивное вычисление факториала
- •Рекурсивные структуры данных
- •Формирование бинарного дерева
- •Рекурсивная процедура обхода узлов дерева сверху-вниз
- •Лабораторное задание
- •Требования к отчету
- •Контрольные вопросы
- •Литература
- •Лабораторная работа - Алгоритмы построения остовного дерева сети
- •Теоретические сведения
- •Алгоритмы Крускала и Прима
- •Пример со схемой микрорайона
- •Пример со схемой компьютерной сети
- •Лабораторное задание
- •Требования к отчёту
- •Литература
- •Задание к лабораторной работе 4
- •Решение задач
- •Лабораторная работа - Алгоритмы нахождения на графах кратчайших путей
- •Теоретические сведения
- •Метод динамического программирования.
- •Пример определения кратчайшего пути №1
- •Пример нахождения кратчайшего пути при условии, что граф неориентированный№2
- •Метод Дейкстры
- •Алгоритм Флойда
- •Алгоритм Йена
- •Алгоритм Беллмана- Форда
- •Литература
- •Лабораторное задание.
- •Требования к отчету
- •Варианты заданий
- •Задание 1: Найти кратчайший путь на графе между тремя парами вершин методом динамического программирования
- •Задание 2: Найти кратчайший путь между тремя парами вершин методом Дейкстры
- •Решение задач
- •Задание на разработку программы
- •Лабораторная работа -Эвристические алгоритмы
- •Теоретические сведения
- •Волновой алгоритм
- •Двухлучевой алгоритм.
- •Пример 2. Осуществить трассировку элементов а и в .
- •Четырехлучевой алгоритм
- •Маршрутный алгоритм.
- •Геометрическая модель задачи о лабиринте
- •Алгоритмы составления расписания.
- •Литература
- •Лабораторное задание.
- •Требования к отчету
- •Решение задач
-
Интерполяционный поиск.
Исходное множество должно быть упорядочено по возрастанию весов.
Первоначальное сравнение осуществляется на расстоянии шага d , который определяется по формуле:
d=
Где:
i – номер первого рассматриваемого элемента
j – номер последнего рассматриваемого элемента
K – отыскиваемый ключ
значения ключей в i и j позициях
[ ] – целая часть от числа.
Идея метода заключается в следующем:
шаг d меняется после каждого этапа, по формуле приведённой выше.
Алгоритм заканчивает работу при d=0, при этом анализируются соседние элементы, после чего делается окончательно решение.
Этот метод прекрасно работает, если исходное множество представляет собой арифметическую прогрессию или множество, приближенное к ней.
Пример . Дано множество ключей:
{2,9,10,12,20,24,28,30,37,40,45,50,51,60,65,70,74,76}
Пусть искомый ключ равен 70. (K=70).
Шаг 1. Определим шаг d для исходного множества ключей:
d=[ (18-1)(70-2)/(76-2) ]=15
Сравниваем ключ, стоящий под шестнадцатым порядковым номером в данном
множестве с искомым ключом:
K16~K 70=70 ключ найден.
-
Поиск по бинарному дереву.
Использование структуры бинарного дерева позволяет быстро вставлять и удалять записи и производить эффективный поиск по таблице. Такая гибкость достигается добавлением в каждую запись двух полей для хранения ссылок.
Пусть дано бинарное дерево:
Требуется по бинарному дереву отыскать ключ SAG.
При просмотре от корня дерева видно, что по первой букве латинского алфавита, название SAG больше чем САР. Следовательно, дальнейший поиск будем осуществлять в правой ветви. Это слово больше чем PIS - снова идем вправо; оно меньше чем TAU - идем влево; оно меньше чем SCO и попадаем в узел 8. Таким образом, название SAG должно находиться в узле 8.
При этом узлы дерева имеют следующую структуру:
Ключ |
Информационная часть |
Указатель на левое поддерево |
Указатель на правое поддерево |
|
/может отсутствовать/ |
LLINK |
RLINK |
KEY |
-
Поиск по сбалансированному дереву.
Бинарное дерево называется сбалансированным, если высота левого поддерева каждого узла отличается от высоты правого не более чем
на 1.
Например:
Сбалансированные бинарные деревья занимают промежуточное положение между оптимальными бинарными деревьями ( все внешние узлы, которых расположены на двух смежных уровнях ) и произвольными бинарными деревьями.
Бинарное дерево называется сбалансированным, если высота левого поддерева каждого узла отличается от высоты правого не более чем на 1.
Рассмотрим следующую структуру узлов сбалансированного бинарного дерева:
Ключ
|
Указатель на левое поддерево |
Указатель на правое поддерево |
Показатель сбалансированности узла |
KEY |
LLINK |
RLINK |
B |
где
В – показатель сбалансированности узла, то есть разность высот правого и левого поддерева ( В = +1; 0; -1 ).
При восстановлении баланса дерева по высоте учитывается показатель В.
Символы +1, ,-1 указывают, что левое поддерево выше правого, поддеревья равны по высоте, правое поддерево выше левого.