1、所以这类随机过程被称为隐马尔科夫过程。 隐马尔可夫模型可以用一个五元组(S,V,A,B,)表示,S为状态的集合:V是一组输出符号组成的集合:A是状态转移矩阵:B为输出符号的概率分布:为初始状态概率分布.评估问题:对于给定模型,求某个观察值序列的概率p(|) ;解码问题:对于给定模型和观察值序列,求可能性最大的状态序列;学习问题:对于给定的一个观察值序列,调整参数,使得观察值出现的概率p(|)最大。下面求解抛掷硬币问题得到序列O=HHHHTHTTTT1,基础解法此方法会导致计算量过大,影响计算速度。2,前向法#includecmathusing namespace std;int main()
2、double A33=0.9,0.05,0.05,0.45,0.1,0.45,0.45,0.45,0.1; double B32=0.5,0.5,0.75,0.25,0.25,0.75; double pi3=0.33,0.33,0.34; int O10=0,0,0,0,1,0,1,1,1,1; double start83;/初始化 for(int i=0;i=2;i+) start0i=pii*BiO0; for(int j=1;j=9;j+) for(int k=0;kk+) double sum=0; for(int l=0;ll+) sum+=startj-1l*Alk; star
3、tjk=sum*BkOj; double p=0; for(int m=0;mm+) p+=start9m; coutpendl; return 0;3,解码问题用viterbi算法 double delt103; int persy103; delt0i=pii*BiO0; persy0i=0; /初始化 for(int t=1;tt+) for(int j=0; double max1=0; for(int ii=0;iiii+) if(max1=deltt-1ii*Aiij*BjOt) max1=deltt-1ii*Aiij*BjOt; persytj=ii; delttj=max1; /迭代过程 int xulie10; double max2=0; for(int iii=0;iiiiii+) if(max2=0;tt-) xuliett=persytt+1xuliett+1; coutxuliemViterbi算法比之穷举法在运算复杂度上有很大提高。上面两个程序解决了“抛掷硬币”问题中的评估问题和解码问题,同样可以应用于语音识别,中文断词等方面。