马尔可夫链算法(markov算法)的awk、C++、C语言实现代码
1.问题描述
马尔可夫链算法用于生成一段随机的英文,其思想非常简单。首先读入数据,然后将读入的数据分成前缀和后缀两部分,通过前缀来随机获取后缀,籍此产生一段可读的随机英文。
为了说明方便,假设我们有如下一段话:
ShowyourflowchartsandconcealyourtablesandIwillbemystified.Showyourtablesandyourflowchartswillbeobvious.
假设前缀的长度为2,则我们处理输入以后得到如下数据,我们首先获取一个前缀,然后在前缀的后缀列表中随机选择一个单词,然后改变前缀,重复上述过程,这样,我们产生的句子将是可读的。
下面是处理过的数据:
前缀 后缀 showyour flowchartstables yourflowcharts andwill flowchartsand conceal flowchartswill be yourtables andand willbe mystified.obvious. bemystified. show beobvious. (end)
处理这个文本的马尔可夫链算法将首先带引showyour,然后随机取出flowcharts或者table两个单词,假设选择的是flowcharts,则新的前缀就是yourflowcharts,同理,选择table时,新的前缀就是yourtable,有了新的前缀yourflowcharts以后,再次随即选择它的后缀,这次是在and和will中随机选择,重复上述过程,就能够产生一段可读的文本。具体描述如下:
设置w1和w2为文本的前两个词 输出w1和w2
循环: 随机地选出w3,它是文本中w1w2的后缀中的一个 打印w3 把w1和w2分别换成w2和w3 重复循环