Я пытаюсь запомнить правильный алгоритм для поиска подмножества в наборе, который соответствует элементу списка возможных подмножеств. Например, если входной сигнал:Алгоритм для сопоставления последовательного подмножества из списка
aehfaqptpzzy
и список подмножество:
{ happy, sad, indifferent }
мы можем видеть, что слово «счастливый» является матч, потому что он находится внутри ввода:
a e h f a q p t p z z y
Я уверен, что существует определенный алгоритм поиска всех таких совпадений, но я не могу вспомнить, как он называется.
UPDATE
Приведенный выше пример не очень хорошо, потому что он имеет письмо повторы, ведь в моей проблеме оба словарных статей и входной строки являются сортные наборы. Например,
вход: acegimnrqvy
словарь: {НКЗ, DFR, LMR, mnqv, например}
Таким образом, в этом примере алгоритм будет возвращать CGN, mnqv и, например, как Матчи. Кроме того, я хотел бы найти лучший набор дополнительных матчей, где «лучший» означает самый длинный. Таким образом, в приведенном выше примере «лучшим» ответом будет «cgn mnqv», например, не будет соответствовать, потому что он конфликтует с cgn, который является более длинным.
Я понимаю, что проблему можно выполнить с помощью проверки грубой силы, но это нежелательно, поскольку в словаре могут быть тысячи записей и тысячи значений во входной строке. Если мы попытаемся найти наилучший набор совпадений, то вычислимость станет проблемой.
Похоже, что у вас действительно есть список, а не набор. Набор не имеет порядка и не содержит дубликатов ... –
Нужны ли совпадения в целевой строке? –
В какой момент, конечно, алгоритм представляет собой простое сканирование слева направо? Какой будет «O (MN)» (где «M» - это число целевых слов, «N» - количество букв в исходном списке). –