马尔可夫算法

您所在的位置:网站首页 马尔可夫算法是图灵完全的算法吗 马尔可夫算法

马尔可夫算法

#马尔可夫算法| 来源: 网络整理| 查看: 265

学习《程序设计实践》第三章。

把输入想像成由一些互相重叠的短语构成的序列,该算法把每个短语分成两部分:一部分由多个词构成的前缀,另一部分是只包含一个词的后缀。马尔可夫链算法能够生成输出短语的序列,其方法是依据(在我们的情况下)原文本的统计性质,随机性地选择跟在前缀后面的特定后缀。采用三个词的短语就能够工作得很好——利用连续两个词构成的前缀来选择作为后缀的一个词: 设置w1和w2为文本的前两个词 输出w1和w2 循环:   随机地选出w3,它是文本中w1w2的后缀中的一个   打印w3   把w1和w2分别换成w2和w3   重复循环

选择二词前缀,则每个输出词w3都是根据它前面的一对词(w1,w2)得到的。前缀中词的个数对设计本身并没有影响,程序应该能对付任意的前缀长度。我们把一个前缀和它所有可能后缀的集合放在一起,称其为一个状态。

数据结构选择:

对于后缀,我们需要在输出时随机选择一个,考虑用List或Set为容器(代码中用List)。对于前缀,我们需要快速查找,并每个前缀对应一系列的后缀,考虑用Map储存,因其可以产生键值对。

即:

Map stateTable = new HashMap();

 

1.前缀以类Prefix表示,类Prefix有一个属性:List pref; 前缀保存的两个词,w1,w2按顺序存入。

Prefix有两个构造方法:Prefix(int npref, String word)用于把npref个的word复制到pref。

Prefix(Prefix prefix)用于把prefix复制到当前实例。

另外重写了Prefix的hashCode和equals方法,以便于作为Map的key。

package chapter3; import java.util.ArrayList; import java.util.List; /** * 保存前缀向量的词 * @author bosshida * */ public class Prefix { public List pref; //n copies of str public Prefix(int npref, String word) { pref = new ArrayList(); for(int i=0; i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3