- •Алгоритмы и структуры данных
- •Лабораторная работа №1 изучение методов оценки алгоритмов Краткая теория
- •Оценка порядка (временная оценка)
- •Порядок выполнения лабораторной работы
- •Содержание отчета о выполненной работе
- •Контрольные вопросы
- •Лабораторная работа №2 исследование и оценка алгоритмов поиска Краткая теория
- •Поиск. Основные определения и классы алгоритмов
- •2. Алгоритм дихотомического поиска
- •1. Алгоритм линейного поиска
- •3. Алгоритм интерполирующего поиска
- •Порядок выполнения лабораторной работы
- •Содержание отчета о выполненной работе
- •Контрольные вопросы
- •Лабораторная работа № 3 разработка рекурсивных алгоритмов Краткая теория
- •Понятие рекурсии и примеры ее использования
- •Порядок выполнения лабораторной работы
- •Содержание отчета о выполненной работе
- •Контрольные вопросы
- •Лабораторная работа №4 исследование и оценка алгоритмов сортировки Краткая теория
- •Сортировка. Основные определения и классы алгоритмов
- •Порядок выполнения лабораторной работы
- •Содержание отчета о выполненной работе
- •Контрольные вопросы
- •Лабораторная работа №5 исследование и оценка алгоритмов поиска на деревьях Краткая теория
- •Построение бинарного дерева
- •Включение узла в двоичное дерево
- •Включение узла в в дерево
- •Удаление узла из бинарного дерева
- •Удаление узла из в дерева
- •Обход дерева
- •Инфиксный (симметричный) обход дерева
- •Поиск элемента в дереве
- •Поиск элемента двоичного дерева
- •Поиск элемента в дерева
- •Порядок выполнения лабораторной работы Подготовка к работе
- •Последовательность выполнения лабораторной работы
- •Содержание отчета о выполненной работе
- •Контрольные вопросы
- •Библиографический список
- •Типы алгоритмов, исследуемых в лабораторной работе 1
- •Типы алгоритмов, исследуемых в лабораторной работе 2
- •Типы алгоритмов, исследуемых в лабораторной работе 3
- •Типы алгоритмов, исследуемых в лабораторной работе 4
- •Типы деревьев, исследуемых в лабораторной работе 5
- •Оглавление
Инфиксный (симметричный) обход дерева
Дано: дерево Т и функция f
Задача: применить f ко всем узлам дерева Т в порядке возрастания ключей
Алгоритм обхода дерева
Если дерево пусто, остановиться.
Иначе
Рекурсивно обойти правое поддерево Т.
Применить функцию f к корневому узлу.
Рекурсивно обойти левое поддерево Т.
В простейшем случае, функция f может выводить значение пары (K,V). При использовании операции ИНФИКСНЫЙ_ОБХОД будут выведены все пары в порядке возрастания ключей. Если же использовать ПРЕФИКСНЫЙ_ОБХОД, то пары будут выведены в порядке, соответствующем описанию дерева.
Поиск элемента в дереве
В общем случае для выполнения этой операции могут использоваться различные условия. В зависимости от способа их задания и организации поиска различают большое количество видов таких операций. Наибольшее распространение получили следующие виды поиска по простому условию:
совпадению,
близости снизу
близости сверху.
Первый вид предполагает нахождение элемента с заданным значением ключа К. Если такого ключа нет, то операция закончилась безуспешно.
При поиске по близости операция всегда заканчивается успешно. Если он выполняется снизу, то результатом будет элемент, ключ которого является ближайшим меньшим искомого. При поиске по близости сверху результат представляет собой элемент с ключом, ближайшим большим искомого.
Поиск элемента двоичного дерева
Рассмотрим алгоритм поиска по совпадению.
Поиск элемента (ИСКАТЬ)
Дано: дерево Т и ключ K.
Задача: проверить, есть ли узел с ключом K в дереве Т, и если да, то вернуть ссылку на этот узел.
Алгоритм поиска элемента двоичного дерева по ключу
Если дерево пусто, сообщить, что узел не найден, и остановиться.
Иначе сравнить K со значением ключа корневого узла X.
Если K=X, выдать ссылку на этот узел и остановиться
Иначе, если K>X, рекурсивно искать ключ K в правом поддереве Т.
Иначе (если K<X) рекурсивно искать ключ K в левом поддереве Т.
Поиск элемента в дерева
Благодаря структуре этого дерева и постоянно поддерживаемому балансу, поиск осуществляется за логарифмическое время от количества элементов. Сам алгоритм описывается следующим образом. Пусть ищется значение X в заданном В-дереве.
Алгоритм поиска элемента В дерева
Начинаем от корня
Если X –один из ключей текущего узла, то СТОП, ключ найден.
Иначе находим пару соседних ключей Y, Z, таких что X лежит в интервале от Y до Z.
Переходим к потомку между Y и Z.
Возврат к шагу 2.
Если дошли до листа и Х нет среди ключей, то СТОП, ключ и элемент не найден.
Порядок выполнения лабораторной работы Подготовка к работе
Подготовка предполагает выполнение следующих этапов.
1. Знакомство со всеми разделами руководства.
2. Разработка алгоритма и программы построения двоичного дерева поиска.
3. Разработка алгоритма и программы построения В+ дерева.
Последовательность выполнения лабораторной работы
Разработать алгоритм и программу построения двоичного дерева поиска:
Получить у преподавателя задание на величину диапазона значений ключей и размер их массива n.
Сформировать массив ключей, значения которых задаются с помощью датчика случайных чисел.
По заданию преподавателя упорядочить значения ключей по возрастанию (убыванию).
Приняв за корень элемент с ключом из середины массива (ключ с номером n / 2), построить двоичное дерево поиска. Информационные поля узлов дерева можно оставить пустыми.
Вывести значения ключей по уровням дерева.
Разработать алгоритм и программу построения В+ дерева:
Получить у преподавателя задание на количество ярусов, величину диапазона значений ключей и размер их массива n на каждом ярусе.
Сформировать массив ключей, значения которых задаются с помощью датчика случайных чисел.
По заданию преподавателя упорядочить значения ключей по возрастанию (убыванию).
Приняв за корень элемент с ключом из середины массива (ключ с номером n / 2), построить В+ дерево. Информационные поля узлов дерева можно оставить пустыми.
Вывести значения ключей по уровням дерева.
Разработать алгоритм и программу поиска заданного преподавателем типа (по совпадению, интервалу или близости) на двоичном и В+ дереве.
Оценить сложность разработанных алгоритмов.
