структура данных для [закрытого] автозавершения

Что такое хорошие структуры данных для алгоритмов автозавершения? Какие структуры данных допускают эффективное нахождение строк, содержащих конкретную подстроку?

29
задан Dominic Rodger 11 March 2010 в 16:13
поделиться

4 ответа

Если вы хотите сделать что-то похожее на то, как Google реализует автозаполнение, вы можете проверить троичное дерево поиска:

http: //igoro.com/archive/efficient-auto-complete-with-a-ternary-search-tree/

Однако, если вы хотите найти любую случайную подстроку в строке, попробуйте дерево обобщенных суффиксов.

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

18
ответ дан 18 July 2019 в 05:32
поделиться
6
ответ дан 18 July 2019 в 05:32
поделиться

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

0
ответ дан 18 July 2019 в 05:32
поделиться

В качестве альтернативы суффиксным массивам, деревьям и попыткам взгляните на Направленные ациклические графы слов (DAWG) и сжатый вариант (CDAWG). Они могут быть построены за линейное время, занимать линейное пространство и обеспечивать поиск подстроки.

С помощью более сложной функции поиска вы даже можете поддерживать ограниченный набор подстановочных знаков.

1
ответ дан 18 July 2019 в 05:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: