/* File: Viterbi.java * * The Viterbi algorithm in Java * Author: Paul Fodor * Stony Brook University, 2007 * Python version: http://en.wikipedia.org/wiki/Viterbi_algorithm */ //import java.io.Serializable; public class Viterbi{ private static String[] states = {"Rainy", "Sunny"}; private static String[] observations = {"walk", "shop", "clean"}; private static double[] start_probability = {0.6, 0.4}; private static double[][] transition_probability = {{0.7, 0.3}, {0.4, 0.6}}; private static double[][] emission_probability = {{0.1, 0.4, 0.5}, {0.6, 0.3, 0.1}}; private static class TNode{ public double prob; public int[] v_path; public double v_prob; public TNode(double prob, int[] v_path, double v_prob){ this.prob = prob; this.v_path = copyIntArray(v_path); this.v_prob = v_prob; } } private static int[] copyIntArray(int[] ia){ int[] newIa = new int[ia.length]; for(int i=0; ivalmax){ argmax = copyIntArray(v_path, next_state); valmax = v_prob; } } U[next_state] = new TNode(total, argmax, valmax); } T = U; } // apply sum/max to the final states: double total = 0; int[] argmax = new int[0]; double valmax = 0; for(int state=0; statevalmax){ argmax = copyIntArray(v_path); valmax = v_prob; } } System.out.print(" Probability of the state:" + total + ".\n Viterbi path: ["); for(int i = 0; i