- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
令 CFG G 为:
S −→ AB|BA|AC|BD|EE
A −→ a
B −→ b
C −→ EB
D −→ EA
E −→ AB|BA|AC|BD|EE
我如何使用 CYK 算法来确定字符串 aabbab
是否是该语言的一部分?
这是我笔记中的伪代码:
for i in 1 .. n
V[i,1] = { A | A -> x[i] }
for j in 2..n
for i in 1 .. n-j+1
{
V[i,j] = phi
for k in 1 .. j-1
V[i,j] = V[i,j] union { A | A -> BC where B in V[i,k]
and C in V[i+k,j-k]}
}
但我不明白答案怎么会是倒三角形。
例如,
V[i,j] i
1(b) 2(a) 3(a) 4(b) 5(a)
1 B A,C A,C B A,C
2 S,A B S,C S,A
j
3 phi B B
4 phi S,A,C
5 S,A,C
^
|_ accept
最佳答案
伪代码[*] 描述了如何应用算法来创建图表。
[i, j]
对指的是输入的一个子串,它从第 i
个符号开始,扩展为 j
个符号.所以[2, 3]
指的是一个3个符号的子串,从符号2开始。如果你的输入是baaba
,那么[2, 3]
指的是中间的aab
。 (索引是从 1 开始的,而不是从 0 开始的。)
图表形成一个三角形,因为您不能有比输入长的子字符串。如果输入是 5 个符号长,那么你可以在 [1, 5]
中有一个值,但你不能在 [2, 5]
中有一个值,因为那样不会t 不再引用子字符串。所以每一行都比前一行短一个框,形成三角形。
V[i, j]
指的是图表中的一个方框。每个框都是一组非终结符,它们可能产生了 [i, j]
描述的子字符串。
该算法依赖于乔姆斯基范式的文法。在 CNF 中,每个产生式的右侧要么是一个终结符,要么是两个非终结符。 (还有另一种算法可以将上下文无关语法转换为 CNF。)
基本上,您从输入的所有 1 符号子串开始。伪代码中的第一个循环填充图表的第一行 (j == 1
)。它查看语法中的所有产生式,如果产生式的右侧对应于该符号,则将该产生式左侧的非终结符添加到集合 V[i, 1]
。 (您的示例似乎在第一行中有一些虚假条目。{A, C}
集应该只是 {A}
。)
算法然后继续遍历其余行,寻找所有可能产生相应子串的产生式。对于将当前子串一分为二的每种可能方式,它都会寻找相应的产生式。这涉及组合来自前几行某些框的非终结符对,并检查是否有任何产生式产生该对,从而为该框构建一组非终结符。
如果最后一行的框以包含开始符号的集合结束,则根据语法输入是有效的。直观地说,它表示起始符号是一个有效的产生式,用于生成从第一个符号开始并持续整个长度的子字符串。
[*] 看起来问题中显示的伪代码包含一些转录错误。您需要咨询权威来源以获得正确的详细信息。
关于algorithm - 如何将 CYK 算法应用于此 CFG?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20195809/
我必须检查是否可以从 Chomsky 范式的给定上下文自由派生字符串。我正在使用 C++。 有很好看pseudocode关于CYK算法的维基百科文章,但我不是很理解。 有人会非常好心地通过给我另一个
我用 CYK算法(已在 Java 中实现)以查看是否根据特定语法识别字符串。现在我需要为字符串生成一个解析树,这是一种从使用 CYK 时使用的矩阵生成树的方法。算法? 最佳答案 当仅将 CYK 实现为
令 CFG G 为: S −→ AB|BA|AC|BD|EE A −→ a B −→ b C −→ EB D −→ EA E −→ AB|BA|AC|BD|EE 我如何使用 CYK 算法来确定字符串
我对自然语言解析很感兴趣,并且编写了 Brill 词性标注器,并希望通过将其与基于语法规则的词性标注器相结合来增强它。有没有人知道任何地方的英语开源规则集文件?我对与 CYK (Cocke-Young
我目前正在从事一个涉及 NLP 的项目。我已经实现了 Jurafsky 和 Martin 中给出的 CKY 标识符(第 450 页的算法)。这样生成的表实际上将非终结符存储在表中(而不是通常的 b
我想实现 CYK algorithm在 C/C++ 中,但在各种网站上可用的伪代码并没有回答如何有效地实现它。我写了一个版本,它使用了一些 STL 结构,比如 map 和 sets,但是速度很慢。我正
我是一名优秀的程序员,十分优秀!