- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我们刚刚在我的数据结构类(class)中分配了一个新项目——使用马尔可夫链生成文本。
概览
给定一个输入文本文件,我们创建一个长度为 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, hi, is, ... + ... , gs, s。这些节点中的每一个都有子节点,它们是跟随它们的字母。例如,节点 Th 将有 child i 和 e。我在每个节点中维护计数,以便稍后生成选择下一个字母的概率。
我的问题:
首先,完成这个项目最有效的方法是什么?我的解决方案似乎非常快,但我真的很想让我的教授大吃一惊。 (在我的上一个项目编辑距离问题的变体中,我做了一个 A*、一个遗传算法、一个 BFS 和模拟退火——我知道这个问题是 NP-Hard)
其次,这个作业的意义何在?它似乎与我们在类里面讲过的大部分内容并没有真正的关系。我们应该学习什么?
最佳答案
关于此作业与您在类里面所学内容的相关性(您的第二个问题)。 “数据结构”类(class)的理念是让学生了解 CS 中经常遇到的许多结构:列表、堆栈、队列、散列、各种类型的树、大图、各种矩阵信条和贪婪等,并提供一些关于它们的常见实现、它们的优点和缺点以及它们的各个应用领域的见解。
由于大多数游戏/谜题/问题都可以映射到这些结构中的某些集合,因此不乏可作为讲座和作业基础的主题。 你的类(class)看起来很有趣,因为在重点关注这些结构的同时,你也有机会发现真正的应用。
例如,“猫和两只狗”是对应用于语言学的统计模型的介绍。您的好奇心和动力促使您与马尔可夫模型建立联系,这是一件好事,因为您在毕业前很可能会再遇到“马尔可夫”几次;-),而且肯定是在 CS 或相关领域的职业生涯中。所以,是的!您可能似乎在许多应用程序等方面游刃有余,但只要您了解在特定情况下选择何种结构和算法,你不是在浪费时间!
现在,关于可能的作业方法的一些提示
trie 似乎是对此类问题的自然支持。也许你可以问问自己,如果你必须索引整本书而不是这个短句,那么这种方法将如何扩展。这似乎主要是线性的,尽管这取决于在 trie 中的三个跃点上的每个选择(对于这个二阶马尔可夫链):随着选择数量的增加,选择路径的效率可能会降低。
构建索引的一种可能的替代存储是随机矩阵(实际上是一个“普通”矩阵,如果只是稀疏矩阵,在统计数据收集过程中,当您规范化每一行时最后变成随机矩阵 - 或者列 - 取决于您的设置)总和为一 (100%)。这样的矩阵大约为 729 x 28,并且允许在一次操作中对两个字母的元组及其相关的后续字母进行索引。 (我得到了 28 分,包括“开始”和“停止”信号,细节......)
这种更有效的索引的成本是使用额外的空间。 Space-wise trie 非常有效,只有效地存储字母三元组的组合,但是矩阵浪费了一些空间(你打赌最后它会非常稀疏,即使在索引很多之后比“狗/猫”句子更多的文字。)
这种大小与 CPU 的妥协 很常见,尽管某些算法/结构有时在这两个方面都比其他算法/结构更好......此外,矩阵方法不会很好地扩展,大小,如果问题已更改为基于前面三个字符的字母选择。
尽管如此,也许可以将矩阵视为替代实现。 尝试各种结构并了解为什么/哪里比其他结构更好(在特定任务的上下文中)非常符合本类(class)的精神。
您可以进行的一个小旅行是创建一个 tag cloud基于字母对(或三元组)的概率:trie 和矩阵都包含所有必要的数据;具有所有有趣属性的矩阵可能更适合这个。
玩得开心!
关于java - 马尔可夫链文本生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1628774/
表架构 DROP TABLE bla; CREATE TABLE bla (id INTEGER, city INTEGER, year_ INTEGER, month_ INTEGER, val I
我需要拆分字符串/或从具有以下结构的字符串中获取更容易的子字符串。 字符串将来自 window.location.pathname 或 window.location.href,看起来像 text/n
每当将对象添加到数组中时,我都会尝试更新 TextView ,并在 TextView 中显示该文本,如下所示: "object 1" "object 2" 问题是,每次将新对象添加到数组时,它都会覆盖
我目前正在寻找使用 Java 读取网站可见文本并将其存储为纯文本字符串的方法。 换句话说,我想转换成这样: Hello stupid World进入“ Hello World ” 或者类似的东西 Un
我正在尝试以文本和 HTML 格式发送电子邮件,但无法正确发送正确的 header 。特别是,我想设置 Content-Type header ,但我找不到如何为 html 和文本部分单独设置它。 这
我尝试了上面的代码,但我无法绑定(bind)文本,我怎样才能将资源内部文本 bloc
我刚刚完成了 Space Shooter 教程,由于没有 GUIText 对象,所以我创建了 UI.Text 对象并进行了相应的编码。它在统一播放器中有效,但在构建 Web 应用程序后无效。我花了一段
我有这个代码: - (IBAction)setButtonPressed:(id)sender { NSUserDefaults *sharedDefaults = [[NSUserDefau
抱歉标题含糊不清,但我想不出我想在标题中做什么。无论如何,对于图像上的文本,我使用了 JLabel 文本并将其添加到图标中。 JLabel icon = new JLabel(new Imag
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我在将 Twitter 嵌入到我从 HTML 5 转换的 wordpress 运行网站时遇到问题。 我遇到的问题是推文不是我的自定义字体... 这是我无法使用任何 css 定位的 HTML 代码,我正
我正在尝试找到解决由于使用以下形式的代码而导致的冗余字符串连接问题的最佳方法: logger.debug("Entering loop, arg is: " + arg) // @1 在大多数情况下,
我写了这个测试 @Test public void removeRequestTextFromRouteError() throws Exception { String input = "F
我目前正在创建一个正则表达式来拆分所有匹配以下格式的字符串:&[文本],并且需要获取文本。字符串可能类似于:something &[text] &[text] everything &[text] 等
有没有办法将标题文本从一个词变形为另一个词,同时保留两个词中使用的字母?我看过的许多 css 文本动画大多是视觉的,很少有旋转整个单词的。 我想要做的是从一个词过渡,例如“BEACH”到“CHANGE
总结matplotlib绘图如何设置坐标轴刻度大小和刻度。 上代码: ?
我在容器 (1) 中创建了容器 (2)。你能帮忙如何向容器(1)添加文本吗?下面是我的代码 return Scaffold( body: Padding( padding: c
我似乎找不到任何人或任何人这样做过。我试图限制我们使用的图像数量,并想创建一个带有渐变作为其“颜色”的文本,并在其周围设置渐变轮廓/描边 到目前为止,我还没有看到任何将两者结合在一起的东西。 我可以自
我正在为视频游戏暗黑破坏神 2 使用 discord.py 构建一个不和谐机器人。其中一项功能要求机器人从暗黑破坏神 2 屏幕截图中提取项目的名称和属性。我目前正在为此使用 pytesseract,但
我很难弄清楚如何旋转 strip.text theme 中的属性来自 ggplot2 .我使用的是 R 版本 3.4.2 和 ggplot2 版本 2.2.1。 以下是 MWE 的数据。 > dput
我是一名优秀的程序员,十分优秀!