Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

сиаод / 35-66 / 67. Хеш-функции (ключи как натуральные числа, деление с остатком, умножение)

..pdf
Скачиваний:
75
Добавлен:
11.05.2015
Размер:
314.14 Кб
Скачать

67. Хеш-функции (ключи как натуральные числа, деление с остатком, умножение).

Хеш-функция – это некоторая функция h(k), которая берет некий ключ k и возвращает адрес, по которому производится поиск в хеш-таблице, чтобы получить информацию, связанную с k.

В качестве хеш-функции h(k) выбирается функция, которая более равномерно рассеивает ключи по пространству таблицы. Это важно для уменьшения числа коллизий.

При выборе хеш-функции следует учитывать:

1)сложность ее вычисления;

2)насколько равномерно распределяет она результат хеширования таблицы.

Для очередного ключа все m хеш-значений должны быть равновероятны.

Идеальной хеш-функцией является такая функция, которая для любых двух неодинаковых ключей дает неодинаковые адреса:

k1≠k2 h(k1) ≠ h(k2)

Существует много способов создания функций хеширования, использующих преобразование произвольного натурального числа к натуральному индексу, лежащему в заданном диапазоне 0 .. m. Поэтому перед хешированием значения ключей приводятся к натуральному значению, если по своей природе они таковыми не являются. Например, последовательности ASCII-символов можно интерпретировать как целые числа, записанные в системе счисления с основанием 256. Вещественные числа можно привести к натуральному типу с некоторой заданной точностью, предварительно умножив на соответствующую степень 10.

Основные методы построения хеш-функции:

1.Метод деления с остатком

Ключу k ставится в соответствие остаток от деления k/m (m – число возможных хеш-значений). h(k) = k mod m

Эффективность рассеивания зависит от m.

2.Метод умножения h(k) = [m*(k*A mod 1)]

Здесь производится умножение ключа на некую константу А, лежащую в интервале [0..1]. После этого берется дробная часть этого выражения и умножается на некоторую константу

m, выбранную таким образом, чтобы результат не вышел за границы хеш-таблицы. Оператор [ ] возвращает наибольшее целое, которое меньше аргумента.