Алгоритмы поиска на основе деревьев
Лабораторная работа 40. Алгоритмы поиска на основе деревьев
Цель работы: изучить алгоритмы поиска на основе деревьев, научиться решать задачи поиска через построение упорядоченного, случайного, оптимального или сбалансированного в высоту деревьев на языке C++.
При выполнении лабораторной работы для каждого задания требуется написать программу на языке С++, которая получает на данные с клавиатуры или из входного файла, выполняет их обработку в соответствии с требованиями задания и выводит результат в выходной файл. Для обработки данных необходимо реализовать функции алгоритмов поиска на основе деревьев. Ограничениями на входные данные является максимальный размер строковых данных, допустимый диапазон значений используемых числовых типов в языке С++.
Теоретические сведения.
Ознакомьтесь с материалом лекции 40.
Задания к лабораторной работе.
Выполните приведенные ниже задания.
- На основании приведенных в лекции 40 кодов реализуйте основные операции, производимые в бинарном дереве поиска и АВЛ-дереве.
- Реализуйте алгоритм удаления элемента из АВЛ-дерева.
- В упорядоченном двоичном дереве с целочисленными ключами возведите в квадрат корневой элемент. Выполните балансировку дерева.
- Найдите в АВЛ-дереве такое поддерево, которое является упорядоченным бинарным деревом.
- Найдите в АВЛ-дереве такое поддерево максимальной высоты, которое является упорядоченным бинарным деревом.
Указания к выполнению работы.
Каждое задание необходимо решить в соответствии с изученным алгоритмами поиска на основе деревьев, реализовав программный код на языке С++. Рекомендуется воспользоваться материалами лекции 40, где подробно рассматриваются описание используемых в работе алгоритмов, примеры их реализации на языке С++. Программу для решения каждого задания необходимо разработать методом процедурной абстракции, используя функции. Этапы решения сопроводить комментариями в коде. В отчете следует отразить разработку и обоснование математической модели решения задачи и привести примеры входных и выходных файлов, полученных на этапе тестирования программ.
Следует реализовать каждое задание в соответствии с приведенными этапами:
- изучить словесную постановку задачи, выделив при этом все виды данных;
- сформулировать математическую постановку задачи;
- выбрать метод решения задачи, если это необходимо;
- разработать графическую схему алгоритма;
- записать разработанный алгоритм на языке С++;
- разработать контрольный тест к программе;
- отладить программу;
- представить отчет по работе.
Требования к отчету.
Отчет по лабораторной работе должен соответствовать следующей структуре.
- Титульный лист.
- Словесная постановка задачи. В этом подразделе проводится полное описание задачи. Описывается суть задачи, анализ входящих в нее физических величин, область их допустимых значений, единицы их измерения, возможные ограничения, анализ условий при которых задача имеет решение (не имеет решения), анализ ожидаемых результатов.
- Математическая модель. В этом подразделе вводятся математические описания физических величин и математическое описание их взаимодействий. Цель подраздела – представить решаемую задачу в математической формулировке.
- Алгоритм решения задачи. В подразделе описывается разработка структуры алгоритма, обосновывается абстракция данных, задача разбивается на подзадачи. Схема алгоритма выполняется по ЕСПД (ГОСТ 19.003-80 и ГОСТ 19.002-80).
- Листинг программы. Подраздел должен содержать текст программы на языке программирования С++, реализованный в среде MS Visual Studio 2010.
- Контрольный тест. Подраздел содержит наборы исходных данных и полученные в ходе выполнения программы результаты.
- Выводы по лабораторной работе.
- Ответы на контрольные вопросы.
Контрольные вопросы
- Почему поиск на бинарных деревьях не дает выигрыша по сложности по сравнению с линейными структурами?
- С какой целью производится балансировка деревьев?
- Какое из деревьев: упорядоченное, случайное, оптимальное или сбалансированное по АВЛ – дает наибольший выигрыш по трудоемкости? Рассмотрите различные случаи.
- Выполните левое малое вращение дерева, приведенного на рис. 40.3.
- Выполните левое большое вращение дерева, приведенного на рис. 40.4.
- Как выполняется балансировка элементов в упорядоченных после вставки или удаления элемента?
- Всегда ли возможна балансировка упорядоченных деревьев? Ответ обоснуйте.
- Как выполняется балансировка элементов в АВЛ-деревьях после вставки или удаления элемента?