2016-03-03 59 views
1

我有一个任务,其中我有三个阵列A,B,C的序列相似性。所有这些都包含相同的数据。为简单起见让我们假设该数据是数字1至5中的数据将是在不同的杂乱序列。我想找出多个B &Ç其阵列具有最相似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,因为子在对A股指数在0和索引1开始为C.

所以元件的数量在匹配序列及其偏移量是我在想什么用。我打算为这两个实体添加权重(匹配序列中的元素数量和它们出现时的偏移差异)

这是否有意义?我只需要粗略近似的相似性,结果不需要精确。是否有任何正式的数学或数据结构模型可以解决这个问题?

顺便说一句,我需要这个实施的项目是在PHP。它是否具有任何内置函数,如levenstein模型的字符串差异?

任何建议都非常欢迎!

+0

以A为参考,你可以尝试找出如何移动的每个元素都是从自己的立场。总排量最小的那个应该是你的答案。那样有用吗 ? –

回答

1

好吧,我想你可以拿出自己的算法(例如生成所有后缀,然后搜索它们,然后定义一个进球的过程),或者你可以使用一个众所周知的算法像
Smith-Waterman本地对齐或Needleman-Wunsch为全球。这些算法的优点是,它们是很好理解的,给你所有可能的比对(你可以选择最适合您的情况)。

NW in PHP

SW in PHP

+0

感谢您提供这方面的信息!太棒了!我认为那正是我想要的。 –