Обычный способ быстрого сопоставления подстрок состоит в создании структуры данных, которая содержит все суффиксы всех строк, которые вы хотите найти. В зависимости от организации это можно назвать «деревом суффиксов» или «массивом суффиксов». Например, если у вас есть 1000 строк и каждая из них имеет длину 50 символов, у вас будет нетривиальные суффиксы 1.000 x 50, т. Е. Ваш суффиксный массив будет содержать 50.000 записей.
Затем для сопоставления вы выполняете бинарный поиск (если массив) или поиск по дереву (если дерево), чтобы найти все те суффиксы в структуре данных, чье начало соответствует строке, записанной в поле поиска. Поскольку это начало суффикса, который вы сопоставляете, вы можете использовать стандартные процедуры поиска (двоичный поиск, спуск по дереву), чтобы быстро получить результат. Каждый суффикс связан с теми строками, в которых он появляется.
Пример: у вас есть две строки "CAT" и "DOT". Ваш массив суффиксов выглядит так (примечание лексикографическое = алфавитный порядок):
#1 AT --> CAT
#2 CAT --> CAT
#3 DOT --> DOT
#4 OT --> DOT
#5 T --> DOT, CAT
Обратите внимание, что существует шесть суффиксов, но два из них одинаковы (последний "T" в "CAT" и "DOT") и оба представлены одной и той же записью (# 5).
Теперь, когда пользователь вводит в поиске, например, «OT» (которое должно совпадать с «DOT»), вы можете сделать простой лексикографический порядок упорядочения во время журнала, поскольку вы сейчас ищете совпадение начало в массиве суффиксов.
Это основной принцип быстрого поиска текста, когда шаблон поиска не содержит подстановочных знаков.