# Packages
No description provided by the author
生成随机文本:马尔可夫链算法
基于《程序设计实践》(Kernighan与Pike,Addison-Wesley 1994)的“设计与实现”
一章中提出的程序。
另请参阅《科学美国人》第260, 122 - 125 (1989)期《计算机娱乐》。
马尔科夫链算法通过创建一个统计模型来生成文本,该模型根据给定前缀潜在的文本后缀创建。
考虑以下文本:
I am not a number! I am a free man!
我们的马尔可夫链算法会将这段文本整理成前缀和后缀的集合,或者说一个“链”:
(该表单假定一个前缀由两个单词组成。)
前缀 后缀
"" "" I
"" I am
I am a
I am not
a free man!
am a free
am not a
a number! I
number! I am
not a number!
为了使用该表单生成文本,我们需要挑选一个初始前缀(比如说“I am”),并选择一个
与该前缀相关联的后缀,此后缀根据输入统计的概率随机决定(比如说“a”);
接着通过从该前缀中移除第一个单词,并附加上该后缀来创建一个新的前缀(即让“am a”
作为新的前缀)。重复此过程,直到我们无法找到任何与当前前缀相关联后缀,或者超过了
单词的限制。(单词的限制是必须的,因为该链表可能包含周期。)
我们这个版本的程序从标准输入中读取,解析成一个马尔可夫链,然后将生成的文本写入
标准输出。前缀与输出长度可在命令行中使用 -prefix 以及 -words 标记来指定。
*/.
Concurrent computation of pi.