Найдите одинаковые последовательности значений в массивах

У меня есть N разных массивов с разным количеством элементов. Я хочу знать, есть ли хороший алгоритм для поиска одинаковых последовательностей значений.

Например:

a= 1,2,3,4,5,6,7,8

b= 9,10,13,5,6,7,13,12

c= 20,36,24,11,2,3,5,6,7,9,11

В результате я хочу, чтобы все три массива имели общую последовательность 5,6,7. Любое предложение?


person NxA    schedule 08.07.2016    source источник
comment
@j_random_hacker: Ваш предлагаемый алгоритм не просто находит общие элементы? Вопрос в последовательности элементов.   -  person Frank Puffer    schedule 08.07.2016
comment
Да, я говорил о последовательностях элементов. Любая идея?   -  person NxA    schedule 11.07.2016


Ответы (1)


Для решения этой проблемы вы можете использовать Suffix Array и LCP или Suffix Trie. Проверьте это руководство: http://wcipeg.com/wiki/Longest_common_substring

Он будет работать за время O (NLogN), где N - это сумма всей длины последовательности.

если количество списков невелико, вы можете использовать решение для динамического программирования, описанное здесь: http://wcipeg.com/wiki/Longest_common_substring#Dynamic_programming_solution

person Ahmad Faiyaz    schedule 27.07.2016