Лабораторная работа №3. Хеш-таблицы
Цель работы: изучение способов использования хеширования данных на ЭВМ: открытое и закрытое хеширование. Оценка быстродействия основных операций и объема памяти по сравнению со списками, массивами и двоичными деревьями.
Задание
1. Определить поля для записей, которые будут храниться в списке согласно своему варианту из лабораторной работы N1. Выбрать ключевое поле (уникальное для всех записей).
2. Разработать алгоритм для вычисления значения хеш-функции, которая должна разбивать исходное множество ключей на K подмножеств (сегментов).
3. Разработать алгоритмы операций для вставки, удаления записей, получения отдельной записи по ключу.
4. Разработать алгоритм для увеличения количества сегментов в 2 раза, когда степень заполнения хеш-таблицы превышает допустимую (число записей начинает превышать число сегментов) в M раз.
5. Реализовать алгоритмы на языке Паскаль или Си. Все функции и процедуры разбить на два типа: работающие с деревом и взаимодействующие с пользователем. Структура дерева должна содержать переменную – код ошибки, через которую процедуры, работающие с данными, будут сообщать об ошибках.
6. Составить и выполнить контрольный пример, проверяющий работу всех операций.
7. Оценить затраты памяти для хранения данных в виде хеш-таблицы и быстродействие операций вставки, поиска и удаления записей. Сравнить полученные данные с тем, что было в лабораторных работах NN 1, 2.
8. Составить отчет о проделанной работе.
Содержание отчета
1. Постановка задачи
2. Описание структур данных
3. Описание алгоритмов
4. Описание контрольного примера
5. Результаты оценки быстродействия
6. Текст программы
Варианты заданий
1. Закрытое хеширование – предел заполнения M = 0.9 (NN1-15 в группе)
2. Открытое хеширование – предел заполнения M = 2.0 (NN16-40 в группе)
Литература
1. Структуры данных и алгоритмы: Пер. с англ.- М.: Издательский дом "Вильямс", 20с. (глава 4. Основные операторы множеств)
2. Алгоритмы и структуры данных: Пер. с англ.- М.: Мир, 19с. (глава 5. Преобразование ключей)


