在堆栈的帮助下,确定单词来自特定语言的算法是什么?
我知道我可以将这个单词逐个符号放入堆栈中,在这样做时我可以记录有关符号的任何所需信息,但它与迭代单词没有区别。
答案 0 :(得分:1)
也许这有助于开始
除此之外,您可以计算frequency of the characters组成单词并将其与不同语言的frequency tables进行比较以进行检查(也许这不会适用于单个单词,但对于一堆单词而言它应该工作的句子)
答案 1 :(得分:1)
如果语言是由context-free grammar定义的,则可以通过所谓的CYK-Algorithm有效地确定特定单词的成员资格。
上面示例中给出的语言可以用以下无上下文语法表示,其中epsilon
表示空字符串。
S -> epsilon | aSb | ab
更新
对于适用的CYK算法,语法需要为Chomsky normal form;对于上面的语法,可以这样做。
S -> epsilon | AT | AB
T -> SB
A -> a
B -> b
在此公式中,A
和B
是终端符号a
和b
的人工非终结符号; T
是引入的人工变量,因为每个右侧最多可包含两个非终结符号。