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

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

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

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

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

2 ответа

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

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

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

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

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

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

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

Другие вопросы по тегам