@DarkByte2015

Как устроены хэш-таблицы?

Озадачился тут вопросом хэш-таблиц. Нашел вот такую статью. Не очень правда понял про закрытую адресацию (там еще и пример на паскале... и не полный). Но главное - правильно ли я понимаю что хэш-таблицы жестко ограничены размером? Т.е. хэш-таблица как статичный массив - на сколько элементов создашь столько и будет и увеличить в дальнейшем ее размер никак нельзя? Судя по тому алгоритму который там приводится это так...

P.S. Так кстати все-таки какой алгоритм лучше? С открытой или закрытой адресацией?
  • Вопрос задан
  • 1333 просмотра
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Открытая и закрытая адресации (в терминах данной статьи) отличаются поведением в случае коллизии, то есть добавления в хэш-таблицу записи с уже имеющимся в ней хэшем.
При открытой адресации будет создан динамический список, голова которого находится в соответствующей ячейке хэш-таблицы, а элементами будут хэшируемые данные (или указатели на них).
При закрытой - будет попытка найти слева (или справа, в зависимости от реализации) от уже занятой ячейки свободную, в которую будет записан хэш и хэшируемые данные.

Очевидно, что открытый вариант несколько более сложен в реализации, но при этом гораздо более гибок и хорошо расширяем. Достоинством является то, что получив хэш простым перебором списка мы можем получить все значения, с таким хэшем.
Закрытый вариант имеет фиксированное потребление памяти и более простую реализацию, но при многочисленных коллизиях даёт низкую эффективность, поскольку надо перебирать ячейки в поисках значений с нужным хэшем.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы