Я недавно обновлял свои знания об алгоритмах и читал на массивах суффиксов. Каждый прочитанный текст определил их как массив суффиксов над одной строкой поиска, но некоторые статьи упоминали о его «тривиальном» обобщении на весь список строк поиска, но я не вижу, как это сделать.Как изменить массив суффикса для поиска нескольких строк?
Предположим, я пытаюсь реализовать простой поиск подстроки по списку слов и хочу вернуть список слов, соответствующих заданной подстроке. Наивный подход, казалось бы, заключается в том, чтобы вставить лексикографический конечный символ «$» между словами в моем списке, объединить их все вместе и создать дерево суффикса из результата. Но это, по-видимому, порождает большое количество нерелевантных записей. Если я создам исходную строку «банановый $ muffin», тогда я в конечном итоге создаю суффиксы для «ana $ muffin», которые я никогда не буду использовать.
Я хотел бы получить любые подсказки относительно того, как это сделать, или, еще лучше, указатель на некоторые тексты алгоритмов, которые обрабатывают этот случай.
Учтите, что для массивов суффиксов и суффиксов требуется время для построения и хранилища Theta (n), поэтому по сложности нет времени или пространства. – Gassa
С другой точки зрения, любая информация о незаменимом суффиксе 'ana $ muffin', который вы храните, фактически связана с полезной подстрокой' ana $ ', хвост не имеет значения. – Gassa
Основная идея построения обобщенного дерева суффиксов или массива состоит в том, чтобы вставлять * отдельные * "конечные символы" '$', '#', '@' и т. Д. Между каждой парой строк. Ни один символ в вашей строке ввода никогда не будет соответствовать ни одному из этих «символов», поэтому нет никакой вероятности, что совпадение подстроки может «пролить» границу между двумя строками. –