在堆栈的帮助下确定单词来自语言

时间:2017-06-26 08:05:07

标签: algorithm stack

在堆栈的帮助下,确定单词来自特定语言的算法是什么?

我知道我可以将这个单词逐个符号放入堆栈中,在这样做时我可以记录有关符号的任何所需信息,但它与迭代单词没有区别。

2 个答案:

答案 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

在此公式中,AB是终端符号ab的人工非终结符号; T是引入的人工变量,因为每个右侧最多可包含两个非终结符号。