马尔可夫链算法

马尔可夫链算法通过分析给定文本的统计特性,能生成与原文风格相似的随机文本。该算法将短语拆分为前缀和后缀,以前缀选择后缀的方式形成新的句子。在C++中,可以使用哈希表存储前缀-后缀关系。通过对内存操作函数memmove、格式化输出函数sprintf以及字符串复制函数strdup的理解,可以实现马尔可夫链的数据结构和算法。
摘要由CSDN通过智能技术生成

引言:

  我们现在准备做的就是给定一个由不同的单词组成的句子,由这个句子产生一些随机的可以读的英语文本。

马尔可夫链可以比较好的完成这个任务!

描述:

  该算法把每个短语分割为两个部分:一部分是由多个词构成的前缀,另一部分是只包含一个词的后缀。马尔可夫链算法能够

生成输出短语的序列,其方法是依据 原文本的统计性质,随机性地选择跟在前缀后面的特定后缀。采用三个词的短语就能够工作

得很好——利用连续两个词构成的前缀来选择作为后缀的一个词:

  设置w1和w2为文本的前两个词

  输出w1和w2

  循环:

    随机地选出w3,它是文本中w1w2的后缀中的一个

    打印w3

    把w1和w2分别换成w2和w3

  重复循环

马尔可夫的数据结构简单一点说就是:以NPREF个单词做为前缀,前缀可以用一个大小为NPREF的一维数组表示(键),

后缀可以用一个链表或者一个动态数组表示(值),看起来就像是一个映射,

用C++的语法表示可以是:

map<vector<string> key[NPREF],vector<string> value>

图示:

如果用纯C来设计数据结构的话,看起来像是这样:

数据结构部分代码:

 

typedef struct State State;
typedef struct Suffix Suffix;
struct State
{
	char *pref[NPREF];
	Suffix *suf;
	State *next;
};
struct Suffix
{
	char *word;
	Suffix *next;
};
State *statetab[NHASH];

那么生成前缀后缀的算法应该

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Raise

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值