具有订单的最频繁模式
Most frequent pattern with an order
我正在搜索类似 Apriori 但有顺序的算法。
我需要一个算法来找到最频繁的模式。
例子:
A B C D E
A B C
A C B D
D E C F
最常见的模式:A B C
顺序很重要。 A 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
我正在搜索类似 Apriori 但有顺序的算法。
我需要一个算法来找到最频繁的模式。 例子: A B C D E A B C A C B D D E C F
最常见的模式:A B C
顺序很重要。 A 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