我们刚刚在我的数据结构类中分配了一个新项目 – 使用马尔可夫链生成文本.
概观
给定输入文本文件,我们创建长度为n个字符的初始种子.我们将它添加到输出字符串中,并根据频率分析选择下一个字符.
This is the cat and there are two dogs.
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个类,Node,ConcreteTrie和Driver
当然,ConcreteTrie类不是传统意义上的Trie.下面是它的工作原理:
鉴于k = 2的句子:
This is the cat and there are two dogs.
我生成节点Th,嗨,是……,…,gs,s.
这些节点中的每个节点都有子节点,这些子节点跟随它们.例如,Node Th将有孩子i和e.我在每个节点中维护计数,以便稍后我可以生成选择下一个字母的概率.
我的问题:
首先,完成这个项目最有效的方法是什么?我的解决方案似乎非常快,但我真的想把我的教授打掉. (在我的上一个项目编辑距离问题的一个变体,我做了A *,遗传算法,BFS和模拟退火 – 我知道问题是NP-Hard)
第二,这项任务的重点是什么?它似乎与我们课堂上所涉及的很多内容无关.我们应该学习什么?