COOPY » Guide
version 0.6.5
|
00001 #ifndef COOPY_VITERBI_INC 00002 #define COOPY_VITERBI_INC 00003 00004 #include <assert.h> 00005 #include <coopy/SparseSheet.h> 00006 #include <coopy/Dbg.h> 00007 00008 namespace coopy { 00009 namespace cmp { 00010 class Viterbi; 00011 } 00012 } 00013 00014 class coopy::cmp::Viterbi { 00015 public: 00016 int K; 00017 int T; 00018 int index; 00019 int mode; 00020 int path_valid; 00021 float best_cost; 00022 coopy::store::SparseFloatSheet cost; 00023 coopy::store::SparseIntSheet src; 00024 coopy::store::SparseIntSheet path; 00025 00026 Viterbi() { 00027 K = T = 0; 00028 reset(); 00029 } 00030 00031 void setSize(int states, int sequence_length); 00032 00033 void reset() 00034 { 00035 index = 0; 00036 mode = 0; 00037 path_valid = 0; 00038 best_cost = 0; 00039 } 00040 00041 void assertMode(int n_mode); 00042 00043 void addTransition(int s0, int s1, float c); 00044 00045 void endTransitions() { 00046 path_valid = 0; 00047 assertMode(0); 00048 } 00049 00050 void beginTransitions() { 00051 path_valid = 0; 00052 assertMode(1); 00053 } 00054 00055 void calculatePath(); 00056 00057 void showPath(); 00058 00059 int length() { 00060 if (index>0) { 00061 calculatePath(); 00062 } 00063 return index; 00064 } 00065 00066 int getPath(int i) { 00067 calculatePath(); 00068 COOPY_ASSERT(i<index); 00069 return path(0,i); 00070 } 00071 00072 int operator() (int i) { 00073 return getPath(i); 00074 } 00075 00076 float getCost() { 00077 calculatePath(); 00078 return best_cost; 00079 } 00080 }; 00081 00082 00083 #endif