package de.ugoe.cs.eventbench.models; import java.util.LinkedList; import java.util.List; import java.util.Random; import de.ugoe.cs.eventbench.data.Event; public class HighOrderMarkovModel extends TrieBasedModel { public HighOrderMarkovModel(int maxOrder, Random r) { super(maxOrder, r); } @Override protected double getProbability(List> context, Event symbol) { double result = 0.0d; List> contextCopy = new LinkedList>(context); List> followers = trie.getFollowingSymbols(contextCopy); int sumCountFollowers = 0; // N(s\sigma') for( Event follower : followers ) { sumCountFollowers += trie.getCount(contextCopy, follower); } int countSymbol = trie.getCount(contextCopy, symbol); if( sumCountFollowers!=0 ) { result = ((double) countSymbol / sumCountFollowers); } return result; } }