Какую структуру данных выбрать для реализации словаря

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

Хеш-таблица

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

Дерево

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

Граф

Если в дополнение к вышесказанному известно, что список слов фиксирован, то подумайте над использованием направленного ациклического графа слов, который на самом деле является минимальным детерминированным конечным автоматом. Этот метод значительно компактнее, чем дерево, и поддерживает многие его операции.

И ещё деревья

Если вы хотите получить поведение, подобное методу дерева, но не хотите поплатиться за это не совсем оптимальным размером файлов, то троичное (тернарное) дерево поиска — ещё одно достойное решение, собственно, как и базисное дерево. Эти структуры довольно разные, но при определённых обстоятельствах они могут быть лучше стандартного дерева.

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

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

Подробнее об алгоритмах и структурах данных:

  1. Статьи, видеокурсы, визуализации.
  2. Раздел для новичков с объяснениями базы.

Перевод статьи «Best data structure for implementing a dictionary?»

Ещё интересное для вас:
Тест: что вы знаете о работе мозга?
Что посмотреть и куда сходить разработчку — ближайшие события