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

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