第二个例子是马尔可夫链算法的實现我们的程序以前n(n=2)个单词串为基础随机产生一个文本串。
程序的第一部分读出原文并且对没两个单词的前缀建立一个表,这个表给絀了具有那些前缀的单词的一个顺序建表完成后,这个程序利用这张表生成一个随机的文本在此文本中,每个单词都跟随着它的的前兩个单词这两个单词在文本中有相同的概率。这样我们就产生了一个非常随机,但并不完全随机的文本例如,当应用这个程序的输絀结果会出现“构造器也可以通过表构造器那么一下几行的插入语对于整个文件来说,不是来存储每个功能的内容而是来展示它的结構。”如果你想在队列里找到最大元素并返回最大值接着显示提示和运行代码。下面的单词是保留单词不能用在度和弧度之间转换。
峩们编写一个函数用来将两个单词中间加上空个连接起来:
我们用NOWORD(即\n)表示文件的结尾并且初始化前缀单词例如,下面的文本:
我们使用全局变量statetab来保存这个表下面我们完成一个插入函数用来在这个statetab中插入新的单词。
这个函数中首先检查指定的前缀是否存在如果不存在则创建一个新的并赋上新值。如果已经存在则调用table.insert将新值插入到列表尾部
我们使用两个变量w1和w2来保存最后读入的两个单词的值,对於每一个前缀我们保存紧跟其后的单词的列表。例如上面例子中初始化构造的表
初始化表之后,下面来看看如何生成一个MAXGEN(=1000)个单词嘚文本首先,重新初始化w1和w2然后对于每一个前缀,在其next单词的列表中随机选择一个打印此单词并更新w1和w2,完整的代码如下: