hell0w0rd
@hell0w0rd
Просто разработчик

Как устроены реальные хеши?

Я тут хеши изучал, сделал небольшую реализацию. Но мне вот стало интересно - как делается по нормальному, в stl например.
У меня фактически хеш - std::list<T> *_hash, то есть массив коллизий.
Получается либо мы должны заранее знать максимальное число, которое может вернуть хеш-функция и создать массив такой длины. Но это не эффективно по памяти и я сомневаюсь что такое используется.
Вот у меня вопрос - с помощью чего это правильно сделать?
Ни бинарные деревья, ни списки не подходят - смысл хеша, как я понимаю - чтение, поиск, удаление в среднем случае за O(n)
  • Вопрос задан
  • 3082 просмотра
Пригласить эксперта
Ответы на вопрос 2
bak
@bak
Точно так же как и вектор. Изначально максимальный размер считается небольшим, а каждый раз при заполнении увеличивается в N раз. Для получения позиции в массиве берётся не сама хеш функция, а остаток от деления её на максимальный размер. При увеличении размера массива все элементы распределяются заново.
Ответ написан
Комментировать
tsarevfs
@tsarevfs Куратор тега C++
C++ developer
Чуть более развенуто: http://neerc.ifmo.ru/wiki
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы