Проблема с подходом дерева суффиксов заключается в том, что вам нужно начать поиск суффиксов для каждой буквы текста, который нужно найти. Я думаю, что лучшим способом было бы организовать поиск по каждому ключевому слову в тексте, но с использованием некоторого метода быстрого поиска с предварительно вычисленными значениями, например Boyer-Moore .
РЕДАКТИРОВАТЬ :
ОК, вы можете быть уверены, что это может быть быстрее. Бойер-Мур очень быстр в среднем случае. Рассмотрим, например, что строки имеют среднюю длину m. BM может быть так же быстро, как O (н / м) для «нормальных» струн. Это было бы 100 * O (н / м). Среднее значение должно составлять O (n * m) (но это правда, что в реальной жизни оно может быть намного быстрее), поэтому, если 100 >> m, то значение выигрыша получается.
Теперь о случайных идеях по оптимизации. В некоторых алгоритмах сжатия, которые должны выполнять обратный поиск, я видел частичные хеш-таблицы, проиндексированные двумя символами строки. То есть, если проверяемая строка представляет собой последовательность символов c1
, c2
и c3
, вы можете проверить, что указано:
if (hash_table[c1 * 256 + c2] == true) check_strings_begining with [c1,c2]
затем для c2
и c3
, и так далее. Удивительно, сколько случаев вы избегаете, выполняя эту простую проверку, так как этот хэш будет истинным только каждые 100/65536 раз (0,1%).