2017-02-21 5 views
0

Ich suche nach einem Algorithmus wie Apriori, aber mit Reihenfolge.Am häufigsten Muster mit einer Bestellung

Ich brauche einen Algorithmus, um die häufigsten Muster zu finden. Beispiel: A B C D E A B C A B C D E D C F

das häufigste Muster: A B C

Die Reihenfolge ist sehr wichtig. Ein C B sollte nicht angezeigt werden, weil A C B nur einmal in meinem Beispiel ist, aber A B C dreimal.

Gibt es einen Algorithmus oder ist die beste Lösung, um es selbst zu programmieren?

Danke für Hilfe.

+1

Sie können eine Trie-Datenstruktur verwenden, um es einfach zu codieren. seine Komplexität ist weniger zu –

+0

das Muster, das Sie suchen, muss ein Triplet sein, richtig? – fustaki

+0

Regex sollte ein guter Anfang sein !!! – FSm

Antwort

0

können Sie die Reihenfolge und speichern Populationen in einem 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); 

Die Ausgabe-Scan ist

{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} 

Sie einfach die Karte von Werten sortieren: http://www.programcreek.com/2013/03/java-sort-map-by-value/ oder einfach nur die Karte scannen für die Suche höchste Population

Übrigens: Population von Muster ABC ist eigentlich 2 nicht 3

+0

ok, danke, ich denke, dass ich das nutzen kann. Ich habe keine Zeichen, sondern Saiten. Das ist kein Problem. Der Algorithmus funktioniert gut. – Interita

Verwandte Themen