- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
下载
第3章 设计与实现
给我看你的流程图而藏起你的表,我将仍然是莫名其妙。如果给我你的表,那
么我将不再要你的流程图,因为它们太明显了。
—Frederick P. Brooks, Jr., 《神秘的人月》
以上从B r o o k s 的经典书中摘录的内容想说的是,数据结构设计是程序构造过程的中心环
节。一旦数据结构安排好了,算法就像是瓜熟蒂落,编码也比较容易。
这种观点虽然有点过于简单化,但也不是在哄骗人。在前一章里我们考察了各种基本数
据结构,它们是许多程序的基本构件。在这一章中,我们将组合这些结构,要完成的工作是
设计和实现一个中等规模的程序。我们将说明被处理的问题将如何影响数据结构,从这里还
可以看到,一旦数据结构安排好之后,代码将会如何自然地随之而来。
我们的观点的另一个方面是:程序设计语言的选择在整个设计过程中,相对而言,并不
是那么重要。我们将抽象地设计这个程序,然后用 C 、C + + 、Aw k 和P e r l把它写出来。由不同
实现之间的比较,可以看出语言在这里能有什么帮助或者妨碍,以及它们并不那么重要的各
种情况。程序的设计当然可以通过语言来装饰,但是通常不会为语言所左右。
我们要选择的问题并不是很常见的,但它在基本形式上又是非常典型的:一些数据进去,
另一些数据出来,其处理过程并不依赖于多少独创性。
我们准备做的就是产生一些随机的可以读的英语文本。如果随便扔出来一些随机字母或
随机的词,结果当然是毫无意义的。例如,一个随机选取字母 ( 以及空格,用作词之间的分隔)
的程序可能产生:
没人会觉得这有什么意思。如果以字母在英语里出现的频率作为它们的权重,我们可能得到
下面这样的内容:
这个也好不到哪儿去。采用从字典里随机选择词的方式也弄不出多少意思来:
为了得到更好一些的结果,我们需要一个带有更多内在结构,例如包含着各短语出现频率的
统计模型。但是,我们怎么才能得到这种统计呢?
我们当然可以抓来一大堆英语材料,仔细地研究。但是,实际上有一种更简单也更有意
思的方法。这里有一个关键性的认识:用任何一个现成的某种语言的文本,可以构造出由这
个文本中的语言使用情况而形成的统计模型。通过该模型生成的随机文本将具有与原文本类
似的统计性质。
3.1 马尔可夫链算法
完成这种处理有一种非常漂亮的方法,那就是使用一种称为马尔可夫链算法的技术。我
第 3章 设计与实现计计49
下载
们可以把输入想像成由一些互相重叠的短语构成的序列,而该算法把每个短语分割为两个部
分:一部分是由多个词构成的前缀,另一部分是只包含一个词的后缀。马尔可夫链算法能够
生成输出短语的序列,其方法是依据 (在我们的情况下)原文本的统计性质,随机性地选择跟在
前缀后面的特定后缀。采用三个词的短语就能够工作得很好——利用连续两个词构成的前缀
来选择作为后缀的一个词:
设置w 和w 为文本的前两个词
1 2
输出w 和w
1 2
循环:
随机地选出w ,它是文本中w w 的后缀中的一个
3 1 2
打印w
3
把w 和w 分别换成w 和w
1 2 2 3
重复循环
为了说明问题,假设我们要基于本章开头的引语里的几个句子生成一些随机文本。这里采用
的是两词前缀:
下面是一些输入的词对和跟随它们之后的词:
输入前缀 跟随的后缀词
处理这个文本的马尔可夫算法将首先打印出 Show your,然后随机取出f l o w c h a r t s或
t a b l e。如果选中了前者,那么现在前缀就变成 your flowcharts,而下一个词应该是
a n d或w i l l。如果它选取t a b l e s,下一个词就应该是 a n d。这样继续下去,直到产生出足
够多的输出,或者在找
文档评论(0)