Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы по АиСД 2023 / Baraeva_Elizaveta_lb3.doc
Скачиваний:
0
Добавлен:
09.09.2026
Размер:
130 Кб
Скачать

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В. И. Ульянова (Ленина)

Кафедра МО ЭВМ

отчет

по лабораторной работе №3

по дисциплине «Алгоритмы и структуры данных»

Тема: Реализация и исследование АВЛ-деревьев

Студентка гр. 2383

Бараева Е. Н.

Преподаватель

Гаврилов А. В.

Санкт-Петербург

2023

Цель работы.

Реализация и тестирование АВЛ-дерева, исследование функций данной структуры на различных размерах данных, сравнение полученных результатов с теоретической оценкой.

Задание.

В предыдущих лабораторных работах вы уже проводили исследования и эта не будет исключением. Как и в прошлые разы лабораторную работу можно разделить на две части:

1) решение задач на платформе moodle

2) исследование по заданной теме

В заданиях в качестве подсказки будет изложена основная структура данных (класс узла) и будет необходимо реализовать несколько основных функций: проверка дерева (является ли оно АВЛ деревом), нахождение разницы между связными узлами, вставка узла.

В качестве исследования нужно самостоятельно:

  • реализовать функции удаления узлов: любого, максимального и минимального

  • сравнить время и количество операций, необходимых для реализованных операций, с теоретическими оценками (очевидно, что проводить исследования необходимо на разных объемах данных)

В отчете помимо проведенного исследования необходимо приложить код всей получившей структуры: класс узла и функции.

Выполнение работы.

Класс Node имеет поля val (значение узла), left (левый дочерний узел) и right (правый дочерний узел). Конструктор класса устанавливает значения этих полей.

Функция height вычисляет высоту дерева, начиная с заданного узла.

Функция check проверяет, является ли дерево сбалансированным. Для этого она сравнивает разницу между высотами левого и правого поддеревьев каждого узла и возвращает False, если эта разница больше 1.

Функция diff вычисляет минимальную разницу между значением узла и значениями его дочерних узлов. Она рекурсивно вызывает себя для левого и правого поддеревьев и сравнивает полученные значения с текущим минимальной разницей.

Функция balance вычисляет коэффициент сбалансированности узла. Коэффициент сбалансированности – это разница между высотами левого и правого поддеревьев узла.

Функция min_val_node находит пустой наименьший узел в дереве. Она итеративно спускается по левым потомкам узла, пока не достигнет наименьшего узла.

Функции right_rotate и left_rotate выполняют правый и левый повороты соответственно. Эти операции используются для балансировки дерева при вставке или удалении узлов.

Функция insert вставляет новый узел со значением val в заданное дерево. Если заданное дерево пусто, она создает новый узел с заданным значением. Она также обновляет высоты узлов и выполняет повороты, если необходимо, чтобы сохранить сбалансированность дерева.

Функция delete удаляет узел с заданным значением из заданного дерева. Если узел, который нужно удалить, имеет двух потомков, его значение заменяется на значение наименьшего узла в правом поддереве, а затем этот наименьший узел удаляется. Если у узла нет одного или обоих потомков, он просто удаляется. После удаления узла обновляются высоты узлов и выполняются необходимые повороты для сохранения сбалансированности дерева.

Функция find_node находит узел с заданным значением в дереве.

Функции find_min и find_max находят узлы с наименьшим и наибольшим значениями соответственно в дереве. Они итеративно спускаются по левым (в случае функции find_min) или правым (в случае функции find_max) потомкам до достижения наименьшего или наибольшего значения.

Функции delete_min_node и delete_max_node сначала находят минимальный узел node (в случае функции delete_min_node) или максимальный (в случае функции delete_max_node). Затем они сохраняют значение данного узла в переменную value и вызывает функцию delete для удаления узла.

Разработанный программный код см. в приложении А.

Соседние файлы в папке Лабы по АиСД 2023