我正在学习自己的正式语言(Aho's,Hopcroft),但我正在用正则表达式来度过难关。
我已经能够处理简单的任务,但这个任务已经提出了挑战,至少对我而言。如果你不能算到目前为止如何解决这个问题,我不习惯这种类型的计算 必须有一些财产或某些东西,让我可以概括答案,我可以把它作为一个正常的表达。
到目前为止,我已经设计出可能存在至少2 o 3个案例:
但是我已经意识到可能有很多组合可以实现总和,因此无法找到正则表达式必须遵循的模式。
ex的字符串。 {122211}0
(大括号是为了方便阅读)在结尾处有零,因为它保持{sum=3k}0
,如果总和为来自字符串的“10”。 {1222111}1
案例可能是{sum=3k+1}
,因此必须在最后,依此类推。
这可能或不是解决问题的正确途径,但我愿意接受任何建议,非常感谢任何帮助。
答案 0 :(得分:0)
这里有一个提示:想想你可能处于什么样的最终状态。你当然至少有3个状态,因为值的数量可以是三个不同的东西。此外,您需要具有不同的开始状态,因为无法接受空字符串。你需要更多的州吗?
提示2:我认为您可以使用启动状态和其他九个状态使用DFA轻松完成此操作,其中三个将接受。
编辑:一旦你有了DFA,就可以使用Kleene定理来构造一个等价的正则表达式。如果你想直接寻找正则表达式,这里有另一个提示:如果你正在查看任何长度为3k的字符串,你可以追加:0;任何长度为1的字符串,后跟1;任何长度为2的字符串,后跟2.因此,如果您可以为长度为3k,1和2的字符串编写正则表达式,那么您就已经完成了。