如果列表中有兩個非重疊的序列並且具有某個屬性,那麼我需要將列表轉換爲空列表。例如。在這種情況下,等於和長度> = 2)在列表中查找相同或相似的序列
mm[{___, b1__, ___, b1__, ___}] := {} /; Length[{b1}] >= 2
,或者例如2子列表,具有相似功能等於0和 Legth = 4
mm[{___, b1__, ___, b2__, ___}] := {} /;
NeedlemanWunschSimilarity[{b1}, {b2}] == 0 && Length[{b1}] == 4 &&
Length[{b2}] == 4
等等... ..
對於mathematica,誰知道內部算法的大師,有沒有更快的 的方式,也許使用PatternTest(?)?
列表中的元素是什麼?你能提供樣品清單嗎?您需要使用的最大序列長度是多少? – Szabolcs
我總是測試一個二進制列表,例如{0,1,0,1,.......,0},並且如果2個非重疊部分(不總是具有相同的長度),我需要測試False或True )是另一個的簡單轉換。我的意思是「轉換」,如平等(無轉換),旋轉,倒置等等,或者有更快的方法來做到這一點? – user1063646
爲了真正得到一個有效的解決方案,您需要提供一個函數,將您的序列帶入一些規範形式,對於您感興趣的每個轉換。否則,任何解決方案都必須執行配對比較,這意味着它將是'O (n^2)'如果'n'是列表的長度。人們可以使用一些技巧來優化n^2前面的常數因子(在某些情況下可能非常重要),但是對於真正大的列表來說,這無關緊要。 –