Создание словаря с использованием Java - PullRequest
0 голосов
/ 12 декабря 2010

Я пишу приложение словарного типа в java. У меня есть список поиска из 2,5 миллионов слов в документе word. Мой словарь основан на мобильном приложении. Так что, когда пользователь набирает 4, я должен получать слова, начинающиеся сбуква именно ghi, и если я набираю 2, я должен брать буквы, начинающиеся с ghi, а вторая буква - одна из букв abc.

Теперь, какой подход должен быть использован.1. Какой должна быть структура данных, чтобы хранить список слов, основанный на сложности пространства и времени?

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

Кто-нибудь может мне помочь?

Ответы [ 3 ]

2 голосов
/ 12 декабря 2010

Ну, во-первых, вы нормализуете свои слова, заменяя каждую букву соответствующим ключом (например, заменяйте каждые g, h и i на 4 и так далее). Затем вы создаете trie или какую-либо другую префиксную структуру данных для хранения слов на основе их нормированного представления. Остальное легко.

0 голосов
/ 12 декабря 2010

Просто подумав, может быть, вы могли бы построить дерево чисел. Каждое число представляет 3 буквы, как вы сказали. Каждый узел дерева представляет отдельный символ в дереве, поэтому для хранения слова «корова» ваше дерево будет выглядеть так:

   [1(abc) , 2 , 3 , 4 , 5 , 6 ...]
   /\
  [... 4 , 5 , 6 (mno) , 7 ... ]
               /\
        [... 7 , 8 , 9(wxyz) ]

Под этим последним узлом вы поместите слово корова и любые другие слова, которые могут состоять из той же серии букв (например, «любой», «лук», «коробка»). Затем, когда пользователь вводит '169', вы можете представить все древовидные буквы, найденные в этом узле, за которыми следуют более длинные слова, найденные в следующих подузлах под выбранным узлом.

0 голосов
/ 12 декабря 2010

Я думаю, вы должны построить структуру, которая будет отображать каждый мир в числа, которые он может быть представлен.и построить карту из такого отображения.Так что вам нужны List<Integer> и Multiset (Map<Integer, Set<String>>) и функция для отображения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...