
- •В. Д. Колдаев Лабораторный практикум по курсу « Структуры и алгоритмы обработки данных »
- •Часть 1
- •Лабораторная работа № 1 « Методы сортировки »
- •Теоретические сведения
- •Методы сортировки
- •Сортировка вставкой
- •Сортировка обменом
- •Сортировка Шелла
- •Быстрая сортировка (сортировка Хоара)
- •Сортировка в нелинейных структурах
- •Турнирная сортировка
- •Пирамидальная сортировка
- •Функция сложности алгоритма
- •Лабораторное задание
- •Методика выполнения лабораторной работы
- •Основные функции системы
- •Варианты заданий
- •Лабораторная работа №2 «Методы поиска».
- •Теоретические сведения
- •Методы поиска
- •Последовательный поиск.
- •Бинарный поиск.
- •Фибоначчиев поиск.
- •Интерполяционный поиск.
- •Поиск по бинарному дереву.
- •Поиск по бору.
- •Поиск хешированием.
- •Алгоритмы поиска словесной информации
- •Алгоритм Бойера - Мура
- •Лабораторное задание
- •Методика выполнения лабораторной работы
- •Варианты заданий
- •Использовать алгоритмы Кнута - Морриса – Пратта, Бойера – Мура, Рабина для поиска текстовой информации. Лабораторная работа № 3 «итеративные и рекурсивные алгоритмы»
- •Теоретические сведения
- •Рекурсивные структуры данных
- •Лабораторное задание
- •Требования к отчету
- •Контрольные вопросы
- •Литература
- •Лабораторная работа № 4 «Алгоритмы построения остовного дерева сети».
- •Теоретические сведения
- •Лабораторное задание
- •Литература
- •Задание : Построить остовное дерево графа методами Крускала и Прима.
- •Решить задачи
- •Лабораторная работа № 5. Алгоритмы нахождения на графах кратчайших путей.
- •Теоретические сведения
- •Метод динамического программирования.
- •Метод Дейкстры
- •Алгоритм Флойда
- •Алгоритм Йена
- •Литература
- •Лабораторное задание.
- •Варианты заданий
- •Задание 2: Найти кратчайший путь между тремя парами вершин методом Дейкстры
- •Решить задачи
- •Составить программу для нахождения кратчайшего пути
- •Лабораторная работа № 6 « Эвристические алгоритмы »
- •Теоретические сведения
- •Волновой алгоритм.
- •Двухлучевой алгоритм.
- •Пример 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~K70=70 ключ найден.
Поиск по бинарному дереву.
Использование структуры бинарного дерева позволяет быстро вставлять и удалять записи и производить эффективный поиск по таблице. Такая гибкость достигается добавлением в каждую запись двух полей для хранения ссылок.
Пусть дано бинарное дерево:
Требуется по бинарному дереву отыскать ключ SAG.
При просмотре от корня дерева видно, что по первой букве латинского алфавита, название SAGбольше чем САР. Следовательно, дальнейший поиск будем осуществлять в правой ветви. Это слово больше чемPIS- снова идем вправо; оно меньше чемTAU- идем влево; оно меньше чемSCOи попадаем в узел 8. Таким образом, названиеSAGдолжно находиться в узле 8.
При этом узлы дерева имеют следующую структуру:
Ключ |
Информационная часть |
Указатель на левое поддерево |
Указатель на правое поддерево |
|
/может отсутствовать/ |
LLINK |
RLINK |
KEY |
Поиск по сбалансированному дереву.Бинарное дерево называется сбалансированным, если высота левого поддерева каждого узла отличается от высоты правого не более чем
на ±1.
Например:
Сбалансированные бинарные деревья занимают промежуточное положение между оптимальными бинарными деревьями ( все внешние узлы, которых расположены на двух смежных уровнях ) и произвольными бинарными деревьями.
Бинарное дерево называется сбалансированным, если высота левого поддерева каждого узла отличается от высоты правого не более чем на ±1.
Рассмотрим следующую структуру узлов сбалансированного бинарного дерева:
Ключ
|
Указатель на левое поддерево |
Указатель на правое поддерево |
Показатель сбалансированности узла |
KEY |
LLINK |
RLINK |
B |
где
В – показатель сбалансированности узла, то есть разность высот правого и левого поддерева ( В = +1; 0; -1 ).
При восстановлении баланса дерева по высоте учитывается показатель В.
Символы +1, Æ,-1 указывают, что левое поддерево выше правого, поддеревья равны по высоте, правое поддерево выше левого.