Учитывая список слов - что будет хорошим алгоритмом для завершения слова в Java? Компромиссы: скорость / эффективность / объем памяти - PullRequest
3 голосов
/ 08 августа 2009

Я изучаю требования к аппаратному и программному обеспечению (конечная цель - мобильное приложение Java) для потенциального бесплатного / платного приложения.

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

Другими словами, я уже знаю содержимое базы данных - но объем памяти / скорость / эффективность поиска алгоритма будут определять объем поддерживаемых данных.

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

Честно говоря, первоначальное приложение имеет, вероятно, менее 500 слов в контексте, поэтому это может не иметь значения, но в конечном итоге приложение может расшириться до десятков тысяч или сотен тысяч записей - таким образом, вопрос о скорости по сравнению с объемом памяти.

Полагаю, я мог бы начать с чего-то более простого и переключиться позже, но я надеюсь понять компромисс раньше!

1 Ответ

2 голосов
/ 08 августа 2009

Завершение слова предполагает, что вы хотите найти все слова, начинающиеся с данного префикса.

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

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

...