Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лр+Структуры и алгоритмы с АТД.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
463.87 Кб
Скачать

Вариант 8:

Тип ключа - 12-значное натуральное число.

Метод хеширования - свёртка, комбинированная с выбором цифр.

Метод разрешения коллизий - квадратичный.

Атд "Хеш-таблица с цепочками коллизий"

Хеш-таблица с цепочками коллизий основана на STL контейнере vector, элементами которого являются STL контейнеры типа list, представляющие собой структуры данных для цепочек коллизий. Размер массива вычисляется в конструкторе класса в зависимости от типа хеширования, при выбранном в работе методе хеширования (свёртка, комбинированная с выбором цифр) размер массива должен быть равен степени числа 10. Вставка элемента в таблицу осуществляется путём преобразования ключа в индекс таблицы и последующей вставки элемента в выбранный список (в конец списка).

Поиск и удаление подобны вставке - сначала вычисляется индекс элемента в массиве (при помощи хеш-функции) после чего происходит удаление или поиск в нужном списке.

Данные:

  Параметры:     Нулевой элемент таблицы

  Структура данных:     STL контейнер - vector элементов типа STL list

Операции:

  Конструктор:     Вход: предполагаемое количество ключей     Предусловия: нет     Процесс: Вычисление размера таблицы, очистка хеш-таблицы     Постусловия: Пустая таблица     Выход: нет

  Деструктор:     Вход: нет     Предусловия: нет     Процесс: нет     Постусловия: нет     Выход: нет

  Опрос размера таблицы:     Вход: Нет     Предусловия: нет     Процесс: Вызов vector<>::size()     Постусловия: нет     Выход: размер таблицы

  Очистка таблицы:     Вход: нет     Предусловия: нет     Процесс: Очистка таблицы     Постусловия: Пустая таблица     Выход: нет

  Проверка таблицы на пустоту:     Вход: Нет     Предусловия: нет     Процесс: Проверка длин всех списков в таблице     Постусловия: нет     Выход: true если ни один список не содержит элементов, false если хотя бы один список содержит один элемент

  Поиск элемента с заданным ключом:     Вход: Ключ элемента     Предусловия: Таблица не пуста, нужный ключ есть в таблице     Процесс: Поиск элемента в таблице     Постусловия: нет     Выход: Пара ключ-значение либо нулевой элемент таблицы если не выполнено предусловие

  Включение нового элемента с заданным ключом:     Вход: Пара ключ, значение     Предусловия: нет     Процесс: Вставка элемента в таблицу     Постусловия: Таблица с увеличенным на один количеством элементов     Выход: Текущий ключ, -1, если не выполнено постусловие

Атд "Хеш-таблица с цепочками коллизий" (окончание)

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

  Поиск первого элемента в таблице:     Вход: нет     Предусловия: Таблица не пуста     Процесс: Поиск первого элемента     Постусловия: нет     Выход: Ключ первого элемента в таблице либо -1, если элементов не найдено

  Поиск следующего элемента:     Вход: Ключ элемента, для которого ищется следующий     Предусловия: Ключ содержится в таблице     Процесс: Поиск следующего     Постусловия: нет     Выход: Ключ следующего элемента