Хеш-таблицы v самоуравновешивающиеся деревья поиска

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

Я вижу, что хеш-таблицы не могут поддержать порядок вставки, но я мог всегда использовать связанный список на вершине для хранения последовательности порядка вставки.

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

Я понимаю, что хеш-таблицы трудно реализовать, чем простая реализация красно-черного дерева, но в практической реализации разве нельзя было бы быть готовой пойти дополнительная миля для проблемы?

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

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

15
задан Qantas 94 Heavy 19 September 2014 в 05:24
поделиться

3 ответа

Вот что я могу придумать:

  1. Есть типы данных, которые нельзя хэшировать (или слишком дорого для хеширования), поэтому не может храниться в хеш-таблицах.
  2. Деревья хранят данные в нужном вам порядке (отсортированы), а не в порядке вставки. Вы не можете (эффективно) сделать это с помощью хеш-таблицы, даже если вы пропустите через нее связанный список.
  3. Деревья имеют лучшую производительность в худшем случае
17
ответ дан 1 December 2019 в 02:37
поделиться

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

5
ответ дан 1 December 2019 в 02:37
поделиться

По моему скромному мнению, самобалансирующиеся деревья довольно хорошо работают в качестве академических тем. И я не знаю ничего, что можно было бы квалифицировать как "прямолинейную реализацию red-black tree".

В реальном мире стена памяти делает их гораздо менее эффективными, чем на бумаге.

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

Одним словом: будьте проще. Если это просто для вас, то это просто и для вашего компьютера.

2
ответ дан 1 December 2019 в 02:37
поделиться
Другие вопросы по тегам:

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