Опубликован: 02.02.2011 | Уровень: для всех | Доступ: свободно
Лекция 41:

Алгоритмы поиска на основе деревьев

< Лекция 40 || Лекция 41: 123 || Лекция 42 >

Лабораторная работа 40. Алгоритмы поиска на основе деревьев

Цель работы: изучить алгоритмы поиска на основе деревьев, научиться решать задачи поиска через построение упорядоченного, случайного, оптимального или сбалансированного в высоту деревьев на языке C++.

При выполнении лабораторной работы для каждого задания требуется написать программу на языке С++, которая получает на данные с клавиатуры или из входного файла, выполняет их обработку в соответствии с требованиями задания и выводит результат в выходной файл. Для обработки данных необходимо реализовать функции алгоритмов поиска на основе деревьев. Ограничениями на входные данные является максимальный размер строковых данных, допустимый диапазон значений используемых числовых типов в языке С++.

Теоретические сведения.

Ознакомьтесь с материалом лекции 40.

Задания к лабораторной работе.

Выполните приведенные ниже задания.

  1. На основании приведенных в лекции 40 кодов реализуйте основные операции, производимые в бинарном дереве поиска и АВЛ-дереве.
  2. Реализуйте алгоритм удаления элемента из АВЛ-дерева.
  3. В упорядоченном двоичном дереве с целочисленными ключами возведите в квадрат корневой элемент. Выполните балансировку дерева.
  4. Найдите в АВЛ-дереве такое поддерево, которое является упорядоченным бинарным деревом.
  5. Найдите в АВЛ-дереве такое поддерево максимальной высоты, которое является упорядоченным бинарным деревом.

Указания к выполнению работы.

Каждое задание необходимо решить в соответствии с изученным алгоритмами поиска на основе деревьев, реализовав программный код на языке С++. Рекомендуется воспользоваться материалами лекции 40, где подробно рассматриваются описание используемых в работе алгоритмов, примеры их реализации на языке С++. Программу для решения каждого задания необходимо разработать методом процедурной абстракции, используя функции. Этапы решения сопроводить комментариями в коде. В отчете следует отразить разработку и обоснование математической модели решения задачи и привести примеры входных и выходных файлов, полученных на этапе тестирования программ.

Следует реализовать каждое задание в соответствии с приведенными этапами:

  • изучить словесную постановку задачи, выделив при этом все виды данных;
  • сформулировать математическую постановку задачи;
  • выбрать метод решения задачи, если это необходимо;
  • разработать графическую схему алгоритма;
  • записать разработанный алгоритм на языке С++;
  • разработать контрольный тест к программе;
  • отладить программу;
  • представить отчет по работе.

Требования к отчету.

Отчет по лабораторной работе должен соответствовать следующей структуре.

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

Контрольные вопросы

  1. Почему поиск на бинарных деревьях не дает выигрыша по сложности по сравнению с линейными структурами?
  2. С какой целью производится балансировка деревьев?
  3. Какое из деревьев: упорядоченное, случайное, оптимальное или сбалансированное по АВЛ – дает наибольший выигрыш по трудоемкости? Рассмотрите различные случаи.
  4. Выполните левое малое вращение дерева, приведенного на рис. 40.3.
  5. Выполните левое большое вращение дерева, приведенного на рис. 40.4.
  6. Как выполняется балансировка элементов в упорядоченных после вставки или удаления элемента?
  7. Всегда ли возможна балансировка упорядоченных деревьев? Ответ обоснуйте.
  8. Как выполняется балансировка элементов в АВЛ-деревьях после вставки или удаления элемента?
< Лекция 40 || Лекция 41: 123 || Лекция 42 >
Денис Курбатов
Денис Курбатов
Владислав Нагорный
Владислав Нагорный

Подскажите, пожалуйста, планируете ли вы возобновление программ высшего образования? Если да, есть ли какие-то примерные сроки?

Спасибо!

Андрей Садовщиков
Андрей Садовщиков
Россия