马尔科夫链.docx
- 文档编号:3015349
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:14
- 大小:26.12KB
马尔科夫链.docx
《马尔科夫链.docx》由会员分享,可在线阅读,更多相关《马尔科夫链.docx(14页珍藏版)》请在冰豆网上搜索。
马尔科夫链
一、引言
1、马尔科夫链的数学背景
马尔可夫链,因安德烈•马尔可夫(A.A.Markov,1856-1922)得名,是数学中具有马尔可夫性质的离散时间随机过程。
该过程中,在给定当前知识或信息的情况下,过去(即当期以前的历史状态)对于预测将来(即当期以后的未来状态)是无关的。
马尔可夫链是随机变量X_1,X_2,X_3...的一个数列。
这些变量的范围,即他们所有可能取值的集合,被称为“状态空间”,而X_n的值则是在时间的状态。
如果X_{n+1}对于过去状态的条件概率分布仅是X_n的一个函数,则
P(X_{n+1}=x|X_0,X_1,X_2,\ldots,X_n)=P(X_{n+1}=x|X_n).
这里x为过程中的某个状态。
上面这个恒等式可以被看作是马尔可夫性质。
2、马尔科夫链的典型应用
①马尔科夫链在股指期货投资中的应用
马尔科夫链转移矩阵的有效状态以近时点动量策略原时点反转策略为主,有效抓住了上涨和下跌的中期和初期.从而准确的抓住了日内股指波动.
②马尔科夫链在天气预报中的应用
通过对马尔科夫链理论和切普曼-柯尔莫哥洛夫方程(方程)的探讨,,结合天气情况不确定等诸多特点,构想了天气情况预报的马尔科夫链预测模型,给出了马尔科夫链的初始概率和多重转移概率的计算方法,根据此算法可以预报短期天气情况,同时扩展到对未来天气情况趋势的预测。
③马尔科夫链在环境预测中的应用
鉴于目前环境质量预测在理论方法和实践上的缺乏,把马尔科夫链引入环境质量的预测中,将各种污染物的浓度变化过程视作马尔科夫过程,通过预测各种污染物的污染负荷系数来推知其浓度值/
④马尔科夫链在桥梁状态预测中的研究与应用
马尔科夫链以矩阵的形式来表达桥梁状况,通过求解状态转移矩阵,进一步预测桥梁未来数年内的基本状况。
综合考虑了桥梁检修的影响,给出了桥梁检修后不同状态的状态转移矩阵,为进一步引入实际数据做了充分的准备。
3、相关文献
《程序设计实践》作者 BrianW.Kernighan
程序设计实践并不是只是写代码。
程序员必须评价各种折中方案,在许多可能性之中做出选择,排除错误,做测试和改进程序性能,还要维护自己和其他人写的软件。
在满足规范的同时还必须关注许多问题,包括兼容性,坚固性和可靠性等等。
该书从排错,测试,性能,可移植性,设计,界面,风格和记法等方面,讨论了程序设计中的实际的同时又是非常深刻和具有广泛意义的思想,技术和方法。
本书值得每个梦想并努力成为优秀程序员的人参考,值得每个计算机专业的学生和IT从业者阅读,也可作为程序设计高级课程的教材或参考书。
其他书籍:
MatthewAustern的《类属程序设计与STL》(GenericProgrammingandtheSTL,Addison-Wesley,1998)
对C++语言本身的参考文献当
然是BjarneStroustrup的《C++程序设计语言》(C++ProgrammingLanguage第3版,Addison-Wesley,1997),LarryWall、TomChristiansen和RandalSchwartz的《Perl程序设计》(ProgrammingPerl第2版,O’Reilly,1996)等等。
4、国内外现状
自我国数学家教育家中科院王梓坤院士在上世纪中期将马尔科夫链引进入我国后,取得了很大的成就,尤其是在天气短期预测方面。
二、哈希表介绍
一般的线性表、树中,记录在结构中的相对位置是随机的即和记录的关键字之间不存在确定的关系,在结构中查找记录时需进行一系列和关键字的比较。
这一类查找方法建立在“比较”的基础上,查找的效率与比较次数密切相关。
理想的情况是能直接找到需要的记录,因此必须在记录的存储位置和它的关键字之间建立一确定的对应关系f,使每个关键字和结构中一个唯一的存储位置相对应。
因而查找时,只需根据这个对应关系f找到给定值K的像f(K)。
若结构中存在关键字和K相等的记录,则必定在f(K)的存储位置上,由此不需要进行比较便可直接取得所查记录。
在此,称这个对应关系f为哈希函数,按这个思想建立的表为哈希表(又称为杂凑法或散列表)。
三﹑编写的C程序
⒈总体思路
解决马尔科夫链的思维,马尔科夫链是根据不同的前缀,随机选择后缀,从而生成句子,我们可以单独储存文章中的每个词,每个词后跟一个链表,当查询到这个词的时候,也能查询到与它关联的链表,从而从与它相关的链表中随机选取一个词输出,我们可以做一种哈希表,让前缀做关键字,它的值是与前缀相关联的所有词的集合。
定义一个数据结构,由一个前缀和一个后缀链表组成。
所有这些信息存在一个散列表里,前缀是关键码。
每个前缀由两个组成。
如果一个后缀在给定前缀下的出现
多于一次,则每个出现都单独包含在有关链表里。
⒉程序分析:
⑴程序开始,用的是宏定义和枚举类型,用typedef声明新类型State和Suffix,把每个词储存成独立的字符串。
⑵hash函数对数组里所有字符串的拼接做散列,lookup向 s p - > p r e f [ ]里存入一个指针。
利用 s p r i n t f动态地建立格式串用来维护缓冲区导出的两个常数之间的关系。
⑶函数b u i l d有两个参数,一个是p r e f i x数组,用来保存前面的所有的输入词;一个是个F I L E指针。
函数把p r e f i x和读入词的一个拷贝送给a d d,该函数在散列表里加入一个新项,并更新前缀数组:
对m e m m o v e的调用是在数组里做删除。
这个操作把前缀数组里从 1到N P R E F - 1的元素向下搬,移到从0到N P R E F - 2的位置。
这也就删去了第一个前缀词,并为新来的一个在后面腾出了位置。
函数a d d s u f f i x把一个新后缀加进去, a d d完成给有关前缀加入一个后缀的一般性工作,a d d s u f f i x做的是把一个词具体地加进后缀链表里。
函数 a d d由b u i l d调用,而a d d s u f f i x只在a d d内部使用这就完成了输入。
⑷对于输出,如果输出非常长,我们可以在产生了一定数目的词之后终止程序;另一种情况是程序遇
到了后缀N O N W O R D。
最终看哪个情况先出现。
函数g e n e r a t e产生每行一个词的输出,用文字处理程序可以把它们汇成长的行。
⑸把所有东西放到一起,装进一个 m a i n函数里,它从标准输入流读入,生成至多有指定个数的词序列。
⑹程序结束。
⒊其他应用的知识:
下程序还用到了链表,结构体以及处理动态链表的函数,特作说明。
malloc函数
其作用是在内存的动态存储区中分配一个长度size的连续空间。
此函数的值(“即返回值”)是一个指向分配域其实地址的指针(类型为void)。
如果此函数未能成功地执行,则返回空指针。
结构体:
C语言允许用户自己指定这样一种结构,它相当于高级语言中的“记录”,struct用来声明结构体类型时所必须用到的关键字,它向编译系统声明这是一个“结构体类型”。
⒋程序源代码
#include
#include
#include
#include
#include
enum
{
NPREF=2, /* 前缀中词的个数*/
NHASH=4093, /*散列表数组的大小*/
MAXGEN=10000, /*生成词数的上届*/
MULTIPLIER=31
};
charNONWORD[]="";
typedefstructStateState;/*定义新类型State*/
typedefstructSuffixSuffix;/*定义新类型Suffix*/
structState{/*前缀和后缀表*/
char*pref[NPREF];/*前缀单词*/
Suffix*suf; /*后缀表*/
State*next;
};
structSuffix{/*后缀表*/
char *word; /*后缀单词*/
Suffix*next;
};
State*statetab[NHASH];
unsignedinthash(char*s[NPREF])/*hash函数对数组里所有字符串的拼接做散列*/
{
unsignedinth;
unsignedchar*p;
inti;
h=0;
for(i=0;i { for(p=(unsignedchar*)s[i];*p! ='\0';p++) { h=MULTIPLIER*h+*p; } } returnh%NHASH; } State*lookup(char*prefix[NPREF],intcreate)/*lookup函数向 s p - > p r e f [ ]里存入一个指针。 */ { inti,h; State*sp; h=hash(prefix); for(sp=statetab[h];sp! =NULL;sp=sp->next) { for(i=0;i { if(strcmp(prefix[i],sp->pref[i])! =0) { break; } } if(NPREF==i) { returnsp; } } if(create) { sp=(State*)malloc(sizeof(State)); if(NULL==sp) { perror("Memorynotenough: "); return0; } for(i=0;i { sp->pref[i]=prefix[i]; } sp->suf=NULL; sp->next=statetab[h]; statetab[h]=sp; } returnsp; } voidaddsuffix(State*sp,char*suffix)/*函数a d d s u f f i x把一个新后缀加进去*/ { Suffix*suf; suf=(Suffix*)malloc(sizeof(Suffix)); suf->wo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 马尔科夫链
![提示](https://static.bdocx.com/images/bang_tan.gif)