马尔可夫算法 |
您所在的位置:网站首页 › 马尔可夫算法是图灵完全的算法吗 › 马尔可夫算法 |
学习《程序设计实践》第三章。 把输入想像成由一些互相重叠的短语构成的序列,该算法把每个短语分成两部分:一部分由多个词构成的前缀,另一部分是只包含一个词的后缀。马尔可夫链算法能够生成输出短语的序列,其方法是依据(在我们的情况下)原文本的统计性质,随机性地选择跟在前缀后面的特定后缀。采用三个词的短语就能够工作得很好——利用连续两个词构成的前缀来选择作为后缀的一个词: 设置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 |