2017-02-21 69 views
0

我正在尋找一種像Apriori這樣的算法,但是它的順序如下。訂單中最常見的模式

我需要一個算法來找到最頻繁的模式。 實施例: A B C dê A B C A C B d dË全稱

最頻繁模式:A B C

的順序是非常重要的。一個C B不應被視爲,因爲A C B在我的例子中只有一次,但A B C是三次。

有沒有算法,或者是我自己編碼的最佳解決方案?

感謝您的幫助。

+1

您可以使用trie數據結構輕鬆對其進行編碼。它的複雜性不大 –

+0

你正在尋找的模式必須是三元組,對吧? – fustaki

+0

正則表達式應該是一個好開始! – FSm

回答

0

您可以在map

String sequence = "ABCDEABCACBDDECF"; 

char[] chars = sequence.toCharArray(); 
int i = 0; 
Map<String,Integer> map = new HashMap<String,Integer>(); 
while(i < chars.length - 2){ 
    String pattern = "" + chars[i] + chars[i+1] + chars[i+2]; 
    System.out.println(pattern); 
    Integer population = map.get(pattern); 
    if(population == null){ 
     population = 1; 
    }else{ 
     population++; 
    } 
    map.put(pattern, population); 

    i++; 
} 

System.out.println(map); 

輸出掃描序列和存儲的人口是

{ACB=1, DEA=1, BCA=1, ABC=2, BCD=1, BDD=1, DEC=1, CAC=1, CBD=1, DDE=1, CDE=1, EAB=1, ECF=1} 

你可以很容易值地圖排序:http://www.programcreek.com/2013/03/java-sort-map-by-value/或只是掃描地圖尋找最高人口

順便說一句:ABC模式的人口實際上是2而不是3

+0

好的,謝謝,我認爲我可以使用這個。我沒有字符,但字符串。那沒問題。該算法工作正常。 – Interita