我正在寻找一种像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