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

Атд "Хеш-таблица с открытой адресацией"

При открытой адресации все элементы хранятся в самой хеш-таблице: каждая ячейка таблицы содержит либо пару ключ-значение, либо NIL в качестве ключа, если элемента нет или DELETED (в ключе), если значение по ключу было удалено. Поиск заключается в том, что по определённому правилу просматриваются элементы таблицы, пока не находится нужный элемент или не заключается, что элемента в таблице нет. При открытой адресации указатели не используются: последовательность просматриваемых ячеек вычисляется. За счет экономии памяти на указателях можно увеличить количество позиций в таблице, что уменьшает число коллизий и сокращает поиск. Чтобы добавить новый элемент, просматриваются ячейки 1:m таблицы, чтобы найти свободное место. Если просматривать все ячейки от 1 до m, то потребуется 0(n) времени. Но при открытой адресации порядок просмотра зависит от ключа. К хеш-функции добавляется второй аргумент - номер попытки (нумерация начинается с 0).

Данные:

  Параметры:     Нулевой элемент таблицы     Константы для квадратичной пробы

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

Операции:

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

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

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

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

  Проверка таблицы на пустоту:     Вход: Нет     Предусловия: нет     Процесс: Просмотр значений всех ключей в таблице     Постусловия: нет     Выход: false если хотя бы один ключ не равен NIL или DELETED, true иначе

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

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

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

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

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

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