我在设计自动机时试过以下问题,但没有取得成功:
由
01
重复一个或多个组成的字符串集 时间或010
重复一次或多次。
其中string仅包含二进制字符。请仔细阅读问题。问题来自约翰E.Hopcroft第2章的自动机理论语言和计算。
您可以使用ENFA(有限自动机与Eplison-Transition)。你也可以给出正则表达式。
答案 0 :(得分:1)
由01重复一次或多次或010重复一次或多次组成的字符串集。
我很确定我知道如何正确地解析这个问题,但是会提供关于如何得到我能看到的两种解释的答案的说明(第二种解释可能在语言上有点延伸,但要忍受我)。我看到的第一个解析是:
由(01重复一次或多次)或(010重复一次或多次)组成的字符串集。
这很容易;正则表达式在union下关闭,这就是"或"上面表示,所以我们只需要带括号的部分的正则表达式,我们可以从中得到完整的表达式。子表达式很简单:重复由Kleene闭包(*)或通常定义的"至少一次"表示。运算符(+)。按照这种思路,子表达式只是(01)+和(010)+,完整的解是(01)+ +(010)+(其中+有两个含义:用作一元算子,它是' "至少一次"重复运算符,如果用作二元运算符,则表示联合)。
我看到的第二个解析是:
由01 (重复一次或多次)或010(重复一次或多次)组成的字符串集。
换句话说,我们可以接受通过重复01或010形成的任何字符串,但我们需要使用其中至少一个。因为我们可以选择任何一个重复,并且由于在此解释下允许混合,我们可以将(01 + 010)+作为正则表达式。
如果你逐字复制问题,第一种解释几乎肯定是预期的。
编辑:对于第三种,甚至是不太合理的解释,需要答案:任何字符串,只要它包含重复多次01或重复多次重复010次。
多次获得01:a = (0+1)* (01) (0+1)* (01)+ (0+1)*
要多次获得010:b = (0+1)* (010) (0+1)* (010)+ (0+1)*
要获得上述任一项:a + b
要至少获得01次:c = (0+1)* (01)+ (0+1)*
要获得010至少一次:d = (0+1)* (010)+ (0+1)*
要获得上述任一项:c + d
注意:除非你是英语母语人士,并且在与任何人提出这项任务进行讨论之后对这种解释非常有信心,这种解释是相当牵强的 - 并不像假设&那么多#34;串"意味着猫玩的东西,但到了那里。