source: trunk/EventBenchCore/src/de/ugoe/cs/eventbench/models/HighOrderMarkovModel.java @ 115

Last change on this file since 115 was 102, checked in by sherbold, 13 years ago
  • replaced java.util.Set and Java.util.List with java.util.Collection where possible
  • Property svn:mime-type set to text/plain
File size: 1.9 KB
Line 
1package de.ugoe.cs.eventbench.models;
2
3import java.util.Collection;
4import java.util.LinkedList;
5import java.util.List;
6import java.util.Random;
7
8import de.ugoe.cs.eventbench.data.Event;
9
10/**
11 * <p>Implements high-order Markov models.</p>
12 *
13 * @author Steffen Herbold
14 * @version 1.0
15 */
16public class HighOrderMarkovModel extends TrieBasedModel {
17       
18        /**
19         * <p>
20         * Id for object serialization.
21         * </p>
22         */
23        private static final long serialVersionUID = 1L;
24
25        /**
26         * <p>Constructor. Creates a new HighOrderMarkovModel with a defined Markov order.</p>
27         * @param maxOrder Markov order of the model
28         * @param r random number generator used by probabilistic methods of the class
29         */
30        public HighOrderMarkovModel(int maxOrder, Random r) {
31                super(maxOrder, r);
32        }
33       
34        /**
35         * <p>
36         * Calculates the probability of the next Event being symbol based on the order of the Markov model. The order is defined in the constructor {@link #HighOrderMarkovModel(int, Random)}.
37         * </p>
38         * @see de.ugoe.cs.eventbench.models.IStochasticProcess#getProbability(java.util.List, de.ugoe.cs.eventbench.data.Event)
39         */
40        @Override
41        public double getProbability(List<? extends Event<?>> context, Event<?> symbol) {
42                double result = 0.0d;
43               
44                List<Event<?>> contextCopy;
45                if( context.size()>=trieOrder ) {
46                        contextCopy = new LinkedList<Event<?>>(context.subList(context.size()-trieOrder+1, context.size()));
47                } else {
48                        contextCopy = new LinkedList<Event<?>>(context);
49                }
50
51       
52                Collection<Event<?>> followers = trie.getFollowingSymbols(contextCopy);
53                int sumCountFollowers = 0; // N(s\sigma')
54                for( Event<?> follower : followers ) {
55                        sumCountFollowers += trie.getCount(contextCopy, follower);
56                }
57               
58                int countSymbol = trie.getCount(contextCopy, symbol);
59                if( sumCountFollowers!=0 ) {
60                        result = ((double) countSymbol / sumCountFollowers);
61                }
62               
63                return result;
64        }
65
66}
Note: See TracBrowser for help on using the repository browser.