словарь — C ++ Самый эффективный способ хранения, загрузки и поиска лексики

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

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

Я думаю, способ хранения и загрузки также влияет на то, как я храню лексикон в памяти.

Спасибо за любые идеи.

7

Решение

Вы, вероятно, хотите сохранить это как Trie

Это эффективный способ хранения словаря. Посмотрите на следующие ответы для получения дополнительной информации

http://en.wikipedia.org/wiki/Trie

https://stackoverflow.com/questions/296618/what-is-the-most-common-use-of-the-trie-data-structure

Сохранение дерева в файл — C

4

Другие решения

На ум приходят несколько вариантов:

  1. Вы могли бы использовать SQLite, который использует mmap отобразить файл в память, сохранить лексикон, чтобы считывалось только то, к чему осуществляется доступ. Вероятно, это разумно, быстро и надежно, а также проще всего реализовать.
  2. Вы можете mmap файл сам
  3. использование seek операции, чтобы переместить указатель файла через файл, не читая все это. Это поможет только в том случае, если лексикон структурирован каким-либо образом, так что вы можете найти правильную позицию, не читая все, т.е. это должна быть структура данных, которая позволяет выполнять поиск лучше, чем O (n) (Trie обычно является хорошим выбором, так как предложенный Salgar).
4

По вопросам рекламы [email protected]