《计算机程序编程课程设计报告》(马尔可夫链算法生成随机可读文本)由会员共享,可在线阅读。请在人文库网上搜索更多关于计算机程序编程课程设计报告(马尔可夫链算法生成随机可读文本)的信息。
1.计算机编程课程设计报告(马尔可夫链算法生成随机可读文本)1. 引言:1、 马尔可夫链的数学背景:由于安德烈的马尔可夫链(A.A.Markov,18561922)得名 ,是一种数学随机过程。在20年初,由于物理、通信与控制、生物学、管理科学等领域的需要,随机过程理论逐渐产生和发展。随机过程理论为许多领域的随机现象提供了数学模型。随机过程的数学定义:试验E的样本空间为,T是一个数集(T(-, ),若对每一个tT,样本空间中随机变量有一个定义X(,t),它被称为依赖t的随机变量X(,t),tT随机过程。马尔可夫链是一个特殊的随机过程。马尔可夫链的数学定义:设随。
2、机序列X(n),n=0,1,2,满足以下条件:(1)每个条件n(n=0,1,2,),X(n)取整数或其子集(记录为I);(2)任意r 1个非负整数n1,n2 ,nr,m(0n1n2nrm)和任何正整数k ,以及状态i1,i2,ir,i,jI,有PX(n1)=i1,X(n2)=i2,X(nr)=ir,X(m)=i0,且PX(m k)=jX(n1)=i1,X(n2)=i2,X(nr)=ir,X(m)=i=PX(m p)=jX(m)=i,则随机序列X(n),n=0,1,2,是马尔可夫链。条件概率PX(m k)=jX(m)=i叫马尔可夫链X(n),n=0,1,2,从状态i开始,在时间mm。
3、 k转移到状态jk步转移概率,记录pij(m,m k),即Pij(m,m k)=PX(m k)=jX(m)=i.马尔可夫链的性质:对于齐次的马尔可夫链有C-K从状态i开始从状态i开始k l步骤转移到状态j这个事件可以分解为从状态i开始,通过k步转移到中间状态s(sI),然后通过l步从s转移到状态j这样的事件并发。对于不同的中间状态s(sI),这样的事件是不相容的。对于不同的中间状态s(sI),这样的事件是不相容的。如果马尔可夫链是通用的,那么它的直观意义是:无论质量点从哪个状态i开始,当转移步数k足够大时,达到状态j的概率与常数相似j 。如果已求出j 当k足够大时,值j 可以作为pij(k)(i,jI)的近似值。。
4、 如果马尔可夫链分布稳定,初试概率分布稳定,则在任何时候m的概率分布相同,等于初始概率分布。2、马尔可夫链的典型应用:物理马尔可夫链通常用于建模排队理论和统计中的建模,也可用作熵编码技术的信号模型,如算术编码(名称LZMA马尔可夫链和类似算术编码的区间编码用于数据压缩算法。马尔可夫链也有许多生物学应用,特别是人口过程,可以帮助模拟生物人口过程的建模。隐藏的马尔可夫模型也用于编码区域或基因预测的生物信息学。马尔可夫链最近的应用是地理统计(geostatistics)中。马尔可夫链用于随机模拟基于观察数据的二到三维离散变量。这个应用类似于克里金。
五、地理统计学(Kriging geostatistics),被称为马尔可夫链地理统计学。3、 相关书籍介绍:介绍马尔可夫决策过程(作者:胡奇英/刘建庸) )马尔可夫决策过程是研究马氏型序贯(动态)决策问题的工具。本书提供了三种基本马氏决策过程模型的一般方法:处理离散时间、连续时间和半马氏。在此基础上,本书研究了状态部分可观察、多目标、约束条件等一般马氏决策过程,以及随机变化环境中的马氏决策过程。生灭过程与马尔可夫链 (作者:王梓坤 )简介:本书描述了生死过程和马尔可夫链的基本理论,并介绍了近年来研究进展第一章概述随机过程的一般概念:马尔可夫链的第二章至第四章;第五章和第六章。
6.生灭过程的基本理论和结构主要采用概率法;第七章和第八章研究生灭过程和双边生灭过程结构主要采用分析法。还讨论了两种方法得出结论之间的联系。2、 本程序的数据结构设计为哈希表。1、 哈希表介绍:哈希表是一种散列结果,它只能通过关键字的特征找到所需的结果,是一种非常方便的数据结构。在记录的存储地址和关键字之间建立一个确定的对应关系H,使每个关键字对应于结构中唯一的存储位置。因此,在搜索时,只要H根据相应关系找到给定关键字值K的图像H(K),即相应的存储位置。如果结构中有等于K的关键字记录,则必须在H(K)在存储位置上,不需要比较就可以直。
7、接取得所查记录。2、 前缀表设计:struct qianzhuib char *phraseN; struct houzhuib *houzhui;struct qianzhuib *next;struct qianzhuib *qianzhuitableHASH;phrase用于存储前缀struct houzhuib *houzhui用于指向跟随前缀的后缀struct qianzhuib *next同义词前缀表用于指向具有相同关键字的同义词(长度为)HASH)结构体数组后缀表设计:struct houzhuib char *word;struct houzhuib。
8、 *next; char *word指向后缀词struct houzhuib *nextH的设计用于指向同一前缀所遵循的不同后缀对应关系:对应关系用于确定前缀存储在前缀表对应的空间中。我们将前缀词组中的每个字母ACSII值乘以37后作和对应关系。之所以选择37,是因为它能在散列表上均匀分布前缀。3、 程序架构介绍:对算法的思考:这个程序运用了马尔可夫链算法。因为文章的最后两个词没有后缀,所以当这两个词作为前缀时,文章的输出就会结束。如果这两个词被视为吸收墙,那么根据数学理论,马尔可夫链必须是通用的,也就是说,输出可以结束。这是马尔可。
9.夫链算法的可行性。int hash(char *cN) 该函数表示哈希表的对应关系,它可以计算哈希表中前缀的对应位置。调用时,需要输入指针数组,分别指向前缀词组的两个单词;它返回的整个值是前缀在哈希表中的位置。struct qianzhuib * lookout(char *phraseN,int create)该函数用于搜索和添加前缀。调用时,第一个参数是指需要添加前缀的指针数组,两个参数是创建标识符(当create0时搜索,当create将前缀添加到前缀表中);它返回到指向搜索或创建的前缀结构的指针。void add(char *phraseN,ch。
10、ar *houzhui)该函数用于向指定前缀添加后缀。第一个参数是需要添加后缀的前缀,第二个参数是需要添加后缀的指针。函数没有返回值。void addhouzhui(struct qianzhuib *p,char *houzhui)该函数是上一个函数中的函数,它以特定的方式添加后缀。int shuchu(char *phraseN)该函数用于输出。调用函数时,参数为指向前缀的指针,函数随机选择相应的后缀并输出;函数返回到整个变量,返回1表示继续输出,返回0表示输出结束。在编写C#语言中使用了许多模板库:4、程序调试:1。编译错误:由于该程序涉及函数和变量,因此在编写中。
在写作阶段,名字经常出错,导致编译过程中出现许多错误。经过多次修改,这些错误被排除在外。2.操作错误:(1)文章输入不成功:使用:for(x=0;a!=13;x )导致文章无法输入,应该正确for(x=0;a!=n;x )。13不是换行符ASCII码。文章输入不正确,因为在装入单词时没有在末尾添加0。添加语句wzzcxy=0;后输入正确。(2)查询函数lookout遇到问题:lookout函数中有句子错误for(i=0;i=#include #include #include /*后缀表结构*/struct houzhuib char *word;struct houzhuib *next。
12、; /*前缀散列表*/struct qianzhuib char *phraseN; /*装前缀单词*/struct houzhuib *houzhui;struct qianzhuib *next;struct qianzhuib *qianzhuitableHASH;/*计算哈希值*/int hash(char *cN) int h;int i;char *p;h=0;for(i=0;inext)for(i=0;iphrasei)!=0) break;if(N=i)return (p);if(1=create)p=(struct qianzhuib*) malloc(LENQ);for(i。
13、=0;iphrasei=phrasei;p-houzhui=NULL;p-next=qianzhuitableh;/*往前插入*/qianzhuitableh=p;return (p);/*添加后缀*/void addhouzhui(struct qianzhuib *p,char *houzhui)struct houzhuib *pp;pp=(struct houzhuib*) malloc(LENH);pp-word=houzhui;pp-next=p-houzhui;p-houzhui=pp;/*添加后缀*/void add(char *phraseN,char *houzhui)st。
14、ruct qianzhuib *p;p=lookout(phrase,1);/*创建前缀*/addhouzhui(p,houzhui);/*加入后缀*/memmove(phrase,phrase 1,(N-1)*sizeof(phrase0);/*库函数*/phraseN-1=houzhui;/*输出函数*/int shuchu(char *phraseN)struct qianzhuib *p;struct houzhuib *sp;int match,i;char *w;p=lookout(phrase,0);if(p-houzhui=NULL) i=0;return (i);else m。
15、atch=0;for(sp=p-houzhui;sp!=NULL;sp=sp-next)if(rand()% match=0)w=sp-word;printf(%s40,w);memmove(phrase,phrase 1,(N-1)*sizeof(phrase0);phraseN-1=w;i=1;return (i);void main()char wzzc20030;/*二维数组用于临存文章*/char w120,w220;char *ppN,*pppN;int x,y,j;int h;char a;/*前缀表初始化为空*/for(h=0;h tempList = new List();L。
16、is returnList = new List();String returnWords=string.Empty;String tempWords = words.Split( );/根据空格找到单词并储存for (int i = 0; i list, List Words)List temp = new List();for (int i = 0; i Words.Count-2; i+)if (Wordsi = listlist.Count - 2 & Wordsi + 1 = listlist.Count - 1)temp.Add(Wordsi + 2);if (temp.Count = 0)return;list.Add(temprandom.Next(temp.Count);FindWord(ref list, Words。