
Ста: Лабораторная работа №3 - Хэш-таблицы и деревья
Версия 2.0, 13 октября 2013г.
(С) 2012-2013, Зайченко Сергей Александрович, к.т.н, ХНУРЭ, доцент кафедры АПВТ
Правила выполнения лабораторной работы
Лабораторная работа выполняется либо бригадой из 2 человек, либо индивидуально. Если студент претендует на оценку “отлично”, работа должна выполняться полностью индивидуально.
В работе на выбор студента предлагаются варианты трех уровней сложности:
Базовый уровень - оценка в интервале 15-20 баллов.
Углубленный уровень - оценка в интервале 21-25 баллов.
Амбициозный уровень - оценка не менее 25 баллов + бонусные баллы на усмотрение преподавателя.
Реализовывать задачи необходимо исключительно на языке программирования С++.
Работа оценивается не только по корректности функционирования решений задач, но и по культуре оформления исходного кода в читабельном виде, адекватности разбиения решения на модули и функции.
Поскольку одной из основных целей данного курса является изучение способов построения классических структур данных, при реализации задач запрещается использовать готовые библиотечные реализации этих структур.
Защита работы:
устная и короткая без отчета в случае защиты в день лабораторной работы;
с полноценным печатным отчетом и ответами на теоретические вопросы в случае защиты в другие дни.
Неприемлемым нарушением считается копирование исходного кода программ у другой бригады или из любых других источников тем или иным способом. В случае подозрения на плагиат, преподаватель оставляет за собой право не засчитывать решение полностью или частично, в зависимости от уровня понимания бригадой написанного кода. Уровень понимания может устанавливаться дополнительными вопросами к каждому из участников бригады по коду конкретной программы, по использованным в ней конструкциям языка программирования. В качестве проверки на понимание могут быть запрошены некоторые изменения поведения программы, отклоняющиеся от оригинальных условий задачи.
Пропуск лабораторной работы, независимо от уважительности причин, не освобождает от сдачи работы. В случае пропуска следует самостоятельно найти методические указания у сокурсников или преподавателя, согласовать с преподавателем вариант задания, в домашних условиях либо с другой группой выполнить лабораторную работу, подготовить отчет и пройти защиту.
Литература к лабораторной работе
Р. Седжвик “Алгоритмы на С++”:
Глава 5 “Рекурсия и деревья”.
Глава 12 “Таблицы символов и деревья бинарного поиска” (подразделы 12.5-12.9).
Глава 14 “Хэширование”.
Т. Кормен, Ч. Лейзерсон, Р. Ривест, К. Штайн “Алгоритмы. Построение и анализ”, 2 издание:
Глава 11 “Элементарные структуры данных (подраздел 11.4).
Глава 12 “Хэш-таблицы”.
Глава 13 “Двоичные деревья поиска”.
А. Ахо, Д. Хопкрофт, Д. Ульман “Структуры данных и алгоритмы”:
Глава 3 “Деревья”.
Глава 4 “Основные операторы множеств” (подразделы 4.7-4.9)
Глава 5 “Специальные методы представления множеств” (подразделы 5.1-5.3).
Д. Кнут “Искусство программирования”:
Том 1, глава 2, раздел 2.3 “Деревья”.
Том 3, глава 6, раздел 6.2 “Поиск путем сравнения ключей”.
Том 3, глава 6, раздел 6.4 “Хэширование”
Исходные данные
При решении задач лабораторной работы по желанию можно использовать готовые реализации изложенные в материалах лекций. Перечисленные ниже файлы прилагаются к данным методическим указаниям:
Хэш-таблицы (hash_table.hpp,hash_table_open_impl.cpp,hash_table_closed_impl.cpp).
N-арные деревья с фиксированным количеством узлов (tree_static.hpp,tree_parent_indices.cpp,tree_child_index_lists.cpp).
N-арные деревья с динамическим количеством узлов (tree_dynamic.hpp,tree_dynamic.cpp)
Классические бинарные деревья поиска (bstree.hpp,bstree.cpp).
Красно-черные деревья (rbtree.hpp,rbtree.cpp).
Эти реализации можно использовать непосредственно как готовую библиотеку, либо использовать как начальную точку для собственного решения.
Выдавать данные файлы за собственные решения настоятельно не рекомендуется :)