最常见的带有订单的模式

时间:2017-02-21 10:49:26

标签: java apriori

我正在寻找像Apriori这样的算法但是有了订单。

我需要一种算法来找到最频繁的模式。 例: A B C D E A B C. A C B D. D E C F

最常见的模式:A B C

订单非常重要。不应该看到C B,因为在我的例子中A C B只有一次,但A B C是三次。

是否有算法或者是我自己编写代码的最佳解决方案?

感谢您的帮助。

1 个答案:

答案 0 :(得分: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