2016-03-03 24 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

感謝您提供這方面的信息!太棒了!我認爲那正是我想要的。 –