Нечеткий поиск подстроки в O (N log N)

У меня есть две строки s1 и s2. Мне нужно найти подстроку в s1 с длиной s2, которая имеет наибольшее количество символов, соответствующих s2. Обе строки имеют длину меньше или равную N. Как мне это сделать за время O (N log N) в наихудшем случае?

Изменить: более формальное определение проблемы. Для двух заданных строк s1, s2 найдите такое K, что len(s1)>len(s2)+K-1 и f(K) максимально, где f(n) определяется формулой

f(n) = |{j : s1[K+j]==s2[j]}|


person Lev K.    schedule 05.11.2015    source источник
comment
Что означает ближайшее совпадение?   -  person David Eisenstat    schedule 06.11.2015
comment
@DavidEisenstat, максимальное количество совпадающих символов.   -  person Lev K.    schedule 06.11.2015
comment
Имеет ли значение порядок символов? Или только какие символы присутствуют?   -  person templatetypedef    schedule 06.11.2015
comment
en.wikipedia.org/wiki/Longest_common_substring_problem   -  person Daniel Wagner    schedule 06.11.2015
comment
Порядок @templatetypedef имеет значение. См. определение, которое я добавил.   -  person Lev K.    schedule 06.11.2015
comment
@DanielWagner Статья, на которую вы ссылаетесь, работает только для последовательного совпадения подстрок. И имеет по существу сложность O (n ^ 2).   -  person Lev K.    schedule 06.11.2015
comment
@ЛевК. Подстрока означает последовательную. Для непоследовательного термина, который вы хотите, является подпоследовательностью; в этом случае en.wikipedia.org/wiki/Longest_common_subsequence_problem   -  person Daniel Wagner    schedule 06.11.2015
comment
@DanielWagner Мне нужна подстрока, максимально близкая к идеальному совпадению, но не обязательно идеальная. Это также означает, что решение существует для любых s1 и s2. См. определение, которое я добавил к вопросу.   -  person Lev K.    schedule 06.11.2015
comment
AFAICT, вы не хотите рассматривать вставки или удаления, что означает, что вы ищете подстроку, которая минимизирует расстояние Хэмминга (не Левенштейна). Существует (несколько удивительный) алгоритм на основе БПФ для эффективного выполнения этой задачи, хотя он требует времени, пропорционального размеру алфавита. Смотрите мой ответ по ссылке для голосования, близкого к обману.   -  person j_random_hacker    schedule 06.11.2015
comment
... который, похоже, не отображается, так что вот он: stackoverflow.com/questions/1146026/   -  person j_random_hacker    schedule 06.11.2015