У меня есть задача, где у меня есть три массива A, B, C. Все они содержат одинаковые данные. Для простоты предположим, что это числа от 1 до 5. Данные будут в разных беспорядочных последовательностях. Я хочу выяснить среди B & C, какой массив имеет данные, наиболее похожие на A.
Eg:
A = 1,2,3,4,5
B = 1,2,3,5,4
C = 4,1,2,3,5
В этом случае легко визуально понять, что B больше похож на A. Но это становится более сложным для действительно смешанных последовательностей.
Eg:
A = 1,2,3,4,5
B = 5,3,1,4,2
C = 4,1,2,3,5
В этом случае я бы предположил, что C ближе к A. Я думаю, что это предположение можно выразить количественно следующим образом: сколько элементов имеют одинаковую последовательность в обоих массивах? В приведенном выше примере подпоследовательность [1,2,3] одинакова в обоих массивах. Второй вопрос: в чем разница смещения между подобной подпоследовательностью? В данном случае это 1, потому что подпоследовательность начинается с индекса 0 для A и индекса 1 для C.
Итак, я думаю использовать количество элементов в соответствующей последовательности и их смещения. Я планирую добавить вес этим двум объектам (количество элементов в соответствующей последовательности и разница смещения в их появлении)
Имеет ли это смысл? Мне нужно только приблизительное сходство, и результаты не обязательно должны быть точными. Существуют ли какие-либо формальные математические модели или модели структур данных, которые решают эту проблему?
Кстати, проект, в котором мне это нужно, реализован на PHP. Есть ли в нем какие-либо встроенные функции, такие как модель Левенштейна для разницы строк?
Любые предложения приветствуются!