hash table вопрсы по реализации
От: sergey_benkov  
Дата: 03.08.11 05:04
Оценка:
Интересует каким образом реализован hash table. Непонятно следующее: хеш функция от любых значений ключа должна выдвавать целые значение в строго фиксированном дипазоне напрмер от 0..n? Массив размером n для хранения значений выделается сразу или по мере заполнения таблицы?
Re: hash table вопрсы по реализации
От: vsb Казахстан  
Дата: 03.08.11 05:57
Оценка: 4 (2)
Здравствуйте, sergey_benkov, Вы писали:

_>Интересует каким образом реализован hash table. Непонятно следующее: хеш функция от любых значений ключа должна выдвавать целые значение в строго фиксированном дипазоне напрмер от 0..n?


hash(x) % n позволит иметь диапазон от 0 до n при любой хеш-функции. Пользовательская хеш-функция обычно выдаёт результаты на всём диапазоне значений возвращаемого типа (например от -2^31 до 2^31 — 1 в Java).

> Массив размером n для хранения значений выделается сразу или по мере заполнения таблицы?


Выбирается n несколько больше, чем ожидаемый размер таблицы. При определённом событии происходит перестроение хеш-таблицы, например если элементов стало в полтора раза больше, чем размер таблицы. Выделяется новая таблица, копируются элементы из старой в новую, старая удаляется. Можно и не перестраивать, но тогда в определённый момент в каждой ячейке таблицы будет скапливаться слишком много элементов и производительность поиска будет всё ниже и ниже.
Re: hash table вопрсы по реализации
От: __kot2  
Дата: 03.08.11 06:34
Оценка:
Здравствуйте, sergey_benkov, Вы писали:

_>Интересует каким образом реализован hash table. Непонятно следующее: хеш функция от любых значений ключа должна выдвавать целые значение в строго фиксированном дипазоне напрмер от 0..n? Массив размером n для хранения значений выделается сразу или по мере заполнения таблицы?

простейший вариант, который я использую в наколенной реализации — нужно сразу выделять массив размера n, где n минимум в два раза будет больше максимального кол-ва добавляемых элементов.
Re[2]: hash table вопрсы по реализации
От: andy1618 Россия  
Дата: 03.08.11 07:43
Оценка:
Здравствуйте, vsb, Вы писали:

_>>Интересует каким образом реализован hash table. Непонятно следующее: хеш функция от любых значений ключа должна выдвавать целые значение в строго фиксированном дипазоне напрмер от 0..n?


vsb>hash(x) % n позволит иметь диапазон от 0 до n при любой хеш-функции.


Кстати, поэтому внутри реализации обычно выбирают n простым числом.
Вот пример, из недавнего обсуждения:
http://rsdn.ru/forum/dotnet/3956346.aspx
Автор: andy1618
Дата: 13.09.10
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.