
- •Тема 7. ХЕШИРОВАНИЕ
- •предпосылки
- •Идея алгоритма хеширования
- •Схема хеширования
- •Хеш-функция
- •Алгоритм разрешения конфликтов
- •Алгоритм размещения записей
- •Алгоритм поиска
- •Если ключ не число?
- •Хеш-таблица на основе массива связанных списков
- •массив связанных списков
- •Используемые типы
- •Поля и методы класса ТН
- •Метод create
- •При освобождении таблицы методом (THesh.Free) все записи считываются в StringGrid и освобождается память,
- •добавить новую запись метод Add(Inf:Tinf);
- •Чтение без удаления метод Read(key:Tkey):Tinf;
- •Чтение c удалением метод Readd(key:Tkey):Tinf;
- •метод Readd(key:Tkey):Tinf;
- •Чтение c удалением метод Readd(key:Tkey):Tinf;
- •Пример организации работы с классом THesh
- •Кнопка занести данные из StringGrid в хеш-таблицу
- •Кнопка добавить новую запись в хеш-таблицу
- •Кнопка прочесть и удалить запись с заданным ключом
- •Выдать и удалить хеш-таблицу
- •Преимущество рассмотренного метода заключается в том, что связанные хэш-таблицы никогда не переполняются, довольно
- •Другие способы хеширования
- •Перемешанная таблица
- •Метод блоков
- •Контрольные вопросы
- •Задача на экзамен
Метод блоков
Используется массив одномерных массивов (блоков)
•Type Tblok=array[1..P] of Tinf;
•Var H:array[0..M-1] of Tblok;
• |
H1,H2:array[0..M-1] of Tblok; |
• |
блоки переполнения |
Размещаются элементы следующим образом:
Вначале обычная функция i:=Key mod M находит номер блока и размещает в H[i] элемент (в конце блока).
Если i-й блок переполнен, то элемент помещается в очередной блок переполнения H1[i].
Этот способ обычно используется при хранении данных на файле. Запись и чтение в (из) файла осуществляется поблочно. Это позволяет значительно ускорить поиск, т.к. чтение из файла по
07/02/19 |
31 |
одной записи медленнее, чем сразу блоком. |
|
Контрольные вопросы
Для чего используется хеширование.
Изложите алгоритм хеширования, что такое хеш-таблица, функция хеширования и алгоритм разрешения конфликтов.
Какие имеются способы хеширования.
Напишите класс, реализующий алгоритм хеширования на основе таблицы из стеков.
07/02/19 |
32 |
Задача на экзамен
•№16
Составить программу, в которой организовать ввод массива n записей с произвольным распределением ключей {a[i].Inf} (Inf.F - фамилия; Inf.к - учетный номер) из StringGrid1 в хеш- таблицу размера M>=n методом Add и организовать поиск записи в хеш-таблице по заданному ключу x методом Read.
Значения М, х ввести из окон Edit, найденную фамилию вывести в окно Edit.
В отдельном модуле написать класс для работы с хеш- таблицей на основе массива из стеков, который включает конструктор Create(M0), а также два метода Add(Inf:Tinf) и Read(Key:Word):Tinf.
07/02/19 |
33 |