【问题标题】:Most frequent pattern with an order订单最频繁的模式
【发布时间】:2017-02-21 10:49:25
【问题描述】:

我正在寻找类似 Apriori 但有顺序的算法。

我需要一个算法来找到最频繁的模式。 例子: A B C D E 甲乙丙 A C B D D E C F

最常见的模式:A B C

顺序很重要。不应该查看 A C B,因为在我的示例中 A C B 只有一次,但 A B C 是 3 次。

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

感谢您的帮助。

【问题讨论】:

  • 您可以使用 trie 数据结构轻松编写代码。它的复杂性也较低
  • 您要查找的模式必须是三元组,对吧?
  • 正则表达式应该是一个好的开始!!!

标签: java apriori


【解决方案1】:

您可以扫描序列并将种群存储在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

【讨论】:

  • 好的,谢谢,我想我可以用这个。我没有字符,只有字符串。那没问题。该算法运行良好。
猜你喜欢
  • 2019-07-21
  • 2021-03-12
  • 2020-09-20
  • 1970-01-01
  • 1970-01-01
  • 2017-09-19
  • 1970-01-01
  • 1970-01-01
  • 2021-04-21
相关资源
最近更新 更多