我刚刚在我的数据结构类中分配了一个新项目 - 使用马尔可夫链生成文本。马尔可夫链文本生成
概述
给定输入的文本文件,我们创建的长度为n个字符的初始种子。我们添加到我们的输出字符串,并根据频率分析选择我们的下一个字符。
这是猫,有两只狗。
Initial seed: "Th"
Possible next letters -- i, e, e
Therefore, probability of choosing i is 1/3, e is 2/3.
Now, say we choose i. We add "i" to the output string. Then our seed becomes
hi and the process continues.
我的解决方案
我有3个班,节点,ConcreteTrie,和驱动程序
当然,ConcreteTrie类不是传统意义上的特里。下面是它如何工作的:
鉴于这些句子K = 2:
这是猫,还有两条狗。
我生成节点Th,嗨,是,... + ...,gs,s。 这些节点中的每一个都有跟随它们的字母的子节点。例如,节点Th将有孩子我和e。我在这些节点的每一个中保持计数,以便稍后可以生成选择下一个字母的概率。
我的问题:
首先,什么是最有效的方式来完成这个项目?我的解决方案似乎非常快,但我真的很想把我教授的袜子关掉。 (在我的最后一个项目中,编辑距离问题的变体,我做了一个A *,一个遗传算法,一个BFS和模拟退火 - 我知道这个问题是NP-Hard)。这项任务的重点?它似乎并不涉及我们在课堂上所讲的很多内容。我们应该学什么?
也许你的教授是一个SO用户,他希望看到,如果你是在关注上课,以及你可以向我们解释它。 – pavium
他没有在课堂上提及马尔可夫链。 – dacman