我正在尋找一種像Apriori這樣的算法,但是它的順序如下。訂單中最常見的模式
我需要一個算法來找到最頻繁的模式。 實施例: A B C dê A B C A C B d dË全稱
最頻繁模式:A B C
的順序是非常重要的。一個C B不應被視爲,因爲A C B在我的例子中只有一次,但A B C是三次。
有沒有算法,或者是我自己編碼的最佳解決方案?
感謝您的幫助。
我正在尋找一種像Apriori這樣的算法,但是它的順序如下。訂單中最常見的模式
我需要一個算法來找到最頻繁的模式。 實施例: A B C dê A B C A C B d dË全稱
最頻繁模式:A B C
的順序是非常重要的。一個C B不應被視爲,因爲A C B在我的例子中只有一次,但A B C是三次。
有沒有算法,或者是我自己編碼的最佳解決方案?
感謝您的幫助。
您可以在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
好的,謝謝,我認爲我可以使用這個。我沒有字符,但字符串。那沒問題。該算法工作正常。 – Interita
您可以使用trie數據結構輕鬆對其進行編碼。它的複雜性不大 –
你正在尋找的模式必須是三元組,對吧? – fustaki
正則表達式應該是一個好開始! – FSm