Почему хеш-карты лучше, чем три-карты?

Под картой trie я подразумеваю ассоциативный массив, в котором полезные данные хранятся в trie вместо хеш-таблицы.

Когда я использую хеш-карту / таблицу, ключи, которые я использую, обычно являются строками. Каковы преимущества хэш-карты по сравнению с некоторой картой на основе дерева? Я читал, что хеш-карта работает быстрее, но мне кажется, что согласованные хеш-функции должны будут проверять каждый элемент массива (char) на предмет окончательного хеша - итерация по массиву один раз. В дереве аналогично вам нужно будет выполнить итерацию по массиву только один раз.

Мне действительно кажется, что это потребует намного больше памяти при кодировании небольших объектов (даже если вы разрешаете только строчные буквенные символы в ключах, это 26 указателей на узел и часто несколько узлов на ключ), но с положительной стороны вы никогда не нужно беспокоиться об изменении размера. Почему хэш-карты так распространены, но я никогда не видел trie-карту?


person Ramfjord    schedule 08.04.2011    source источник


Ответы (2)


Хеш-карты более распространены, чем trie-карты, потому что они более общие: их можно заставить работать с любым хешируемым объектом, в то время как trie работает с последовательностями. Хеш-таблицы также имеют лучшую локальность ссылок в общих реализациях, поскольку они хранят элементы близко друг к другу.

(Строго говоря, каждый объект представляет собой последовательность битов, но тогда общее дерево потребует от пользователя сериализации своего объекта перед сохранением его в дереве. Это довольно неудобно по сравнению с определением пользовательских хэш-функций.)

person Fred Foo    schedule 08.04.2011
comment
Собственно, из деревьев тоже можно строить попытки. - person dfeuer; 20.03.2015

На всякий случай, если вы программист на Scala, TrieMap представляет собой «параллельную поточно-безопасную безблокировочную реализацию сопоставленного дерева хеш-массива». На данный момент в стандартной библиотеке Java нет.

person Dan    schedule 19.03.2015