Ignore:
Timestamp:
04/13/11 14:13:45 (13 years ago)
Author:
sherbold
Message:
  • moved training logic for single sequences from PPM to Trie
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/EventBenchCore/src/de/ugoe/cs/eventbench/ppm/Trie.java

    r6 r9  
    44import java.awt.Rectangle; 
    55import java.awt.Shape; 
     6import java.util.LinkedHashSet; 
    67import java.util.LinkedList; 
    78import java.util.List; 
     9import java.util.Set; 
    810 
    911import javax.swing.JFrame; 
    1012 
    1113import org.apache.commons.collections15.Transformer; 
     14 
     15import de.ugoe.cs.eventbench.markov.IncompleteMemory; 
    1216 
    1317import edu.uci.ics.jung.algorithms.layout.Layout; 
     
    2125public class Trie<T> { 
    2226         
     27        private Set<T> knownSymbols; 
     28         
    2329        private final TrieNode<T> rootNode; 
    2430         
    2531        public Trie() { 
    2632                rootNode = new TrieNode<T>(); 
     33                knownSymbols = new LinkedHashSet<T>(); 
     34        } 
     35         
     36        public Set<T> getKnownSymbols() { 
     37                return new LinkedHashSet<T>(knownSymbols); 
     38        } 
     39         
     40        // trains the current Trie using the given sequence and adds all subsequence of length maxOrder 
     41        public void train(List<T> sequence, int maxOrder) { 
     42                IncompleteMemory<T> latestActions = new IncompleteMemory<T>(maxOrder); 
     43                int i=0; 
     44                for(T currentEvent : sequence) { 
     45                        latestActions.add(currentEvent); 
     46                        knownSymbols.add(currentEvent); 
     47                        i++; 
     48                        if( i>=maxOrder ) { 
     49                                add(latestActions.getLast(maxOrder)); 
     50                        } 
     51                } 
     52                int sequenceLength = sequence.size(); 
     53                for( int j=maxOrder-1 ; j>0 ; j-- ) { 
     54                        add(sequence.subList(sequenceLength-j, sequenceLength)); 
     55                } 
    2756        } 
    2857         
    2958 
     59        // increases the counters for each symbol in the subsequence 
    3060        public void add(List<T> subsequence) { 
    31                 if( !subsequence.isEmpty() ) { 
     61                if( subsequence!=null && !subsequence.isEmpty() ) { 
     62                        knownSymbols.addAll(subsequence); 
    3263                        subsequence = new LinkedList<T>(subsequence);  // defensive copy! 
    3364                        T firstSymbol = subsequence.get(0); 
Note: See TracChangeset for help on using the changeset viewer.