2010-09-20 6 views
4

У меня есть две строки, которые нужно сравнить для подобия. Алгоритм должен быть разработан, чтобы найти максимальное сходство. В этом случае порядок имеет значение, но промежуточные (или отсутствующие) символы этого не делают. Расстояние редактирования не может использоваться в этом случае по разным причинам.Поиск частичных подстрок внутри строки

Ситуация в основном следующим образом:

string 1: ABCDEFG 
string 2: AFENBCDGRDLFG 

полученный алгоритм найдет подстроку A, BCD, FG

Я в настоящее время рекурсивного решения, но потому, что это должно быть запущен на огромном количестве данных, любые улучшения были бы оценены

+2

Вы можете написать описание своего текущего, рекурсивного решения? – Ani

+0

У вас есть язык для этого? – griegs

+0

Это только я, или это NP-жесткий? –

ответ

5

Глядя на ваш единственный пример, похоже, вы хотите найти самый длинный общий подпоследовательность. Посмотрите на LCS

Это только меня, или это NP-трудной? - Дэвид Титаренко (от комментариев)

Если вы хотите, чтобы LCS произвольного количества строк было NP-жестким. Но это число входных строк является постоянным (как в этом случае 2) это можно сделать в полиномиальное время.

+1

+1 хороший ответ :) –

+1

Это не так. при условии ввода примера OP, он вернет «ABCDFG» – aaronasterling

+0

@Aaron: вам придется немного модифицировать алгоритм, чтобы найти фактическую подстроку, которая способствовала ответу. Но основная идея остается практически такой же. – codaddict

Смежные вопросы