Перехеширование — различия между версиями
(Новая страница: «При любом виде хеширования возникают коллизии. В случае открытого хеширования большое ко…») |
(нет различий)
|
Версия 19:02, 10 июня 2011
При любом виде хеширования возникают коллизии. В случае открытого хеширования большое количество коллизий приведет к большой длине цепочек, при закрытом или двойном хешировании - к переполнению массива.
Перехеширование при разных типах хеширования
При открытом типе
При использовании открытого метода, элементы с одинаковым результатом хеш-функции помещают в список. Так как операции , и работают за , где - длина списка, то с некоторого момента выгодно увеличить размер хеш-таблицы, чтобы поддерживать амортизационную стоимость операции .
Рассмотрим следующий алгоритм перехеширования: когда в хеш-таблицу добавлено
элементов, где - размер хеш-таблицы, создадим новую хеш-таблицу размера , и последовательно переместим в нее все элементы первой таблицы. При этом, сменим хеш-функцию так, чтобы она выдавала значения (в функциях, использующих остаток от деления на длину таблицы, достаточно брать остаток от деления на ).Найдем амортизационную стоимость добавления, после которого было сделано перехеширование, используя метод предоплаты. С момента последнего перехеширования было произведено не менее
операций , так как изначально в массиве находится элементов (или в начале работы), а перехеширование происходит при наличии элементов.Для проведения перехеширования необходимо произвести
операций , средняя стоимость которых составляет (Анализ открытого хеширования см. Т.Корман, второе издание, стр. 288), потратить операций на проход хеш-таблицы, и операций на удаление предыдущей таблицы. В итоге, если мы увеличим стоимость каждой операции на , то есть на , операция перехеширования будет полностью предоплачена. Значит, амортизационная стоимость перехеширования при открытом типе хеш-таблицы равна .