我有一個值序列,我想知道它是否包含某個最小長度的重複子序列。例如:檢查序列長度> = N的重複子序列
1, 2, 3, 4, 5, 100, 99, 101, 3, 4, 5, 100, 44, 99, 101
包含子序列3, 4, 5, 100
兩次。它也包含子序列99, 101
兩次,但該子序列是兩個短的關心。
是否有檢查這種子序列存在的有效算法?我對序列的定位並不特別感興趣(儘管這對驗證有幫助),但我主要只是對True/False的答案感興趣,因爲序列和最小的子序列長度。
我到目前爲止唯一的方法是蠻力搜索它:對於序列中的每個項目,找到項目出現的所有其他位置(已經在O(N^2)),然後向前走一步從每個位置開始計算一次,看看下一個項目是否匹配,並繼續前進,直到找到不匹配或找到足夠長度的匹配子序列。
我的另一個想法是,但一直未能發展成爲一種實際的方法,即構建一個包含所有序列的樹,以便每個數字都是一個節點,並且是其前面的數字的一個子節點,該節點碰巧已經在樹中。
它看起來像你正在尋找子字符串,而不是子序列。查看後面的內容:http://en.wikipedia.org/wiki/Subsequence,「一個子序列是一個序列,可以通過刪除一些元素而不改變剩餘元素的順序從另一個序列中派生出來」。對於這兩個子序列和子串都存在有效的算法。 –
後綴樹是O(n) –