我想知道如何判断某个正则表达式是否是另一个正则表达式的补充。假设我有2个正则表达式r_1和r_2。我当然可以从它们每个中创建一个DFA,然后检查以确保L(r_1)!= L(r_2)。但这并不一定意味着r_1是r_2的补数,反之亦然。同样,似乎许多不同的正则表达式可能是单个正则表达式的相同补码。 因此,我想知道在给定两个正则表达式的情况下,如何确定一个是否是另一个的补充。这对我来说也是新的,所以也许我缺少一些显而易见的东西。
编辑:我应该指出,我不仅仅是在寻找正则表达式的补码。我给了两个正则表达式,我要确定它们是否互为补充。
答案 0 :(得分:0)
这是一种概念上简单的方法,即使不是十分有效(也不一定有更有效的解决方案...):
为什么要这样做?两组的对称差是正好是一个(不是两个,也不是两个都不是)的所有事物的集合。如果L(s)和L(r)是互补的,那么不难发现对称差包括所有字符串(根据定义,集合的补码包含集合中未包含的所有内容)。假设现在有非互补集,它们的对称差异是所有字符串的宇宙。这些集合不是互补的,因此(1)它们的联合不是空的,或者(2)它们的联合不是所有字符串的Universe。在情况(1)中,对称差异将不包括共享元素;在情况(2)中,对称差将不包括丢失的字符串。因此,只有互补集的对称差等于所有弦的全域。并且所有字符串集的最小DFA始终具有带有自循环的可接受初始状态。
答案 1 :(得分:-1)
补码:L(r_1)==!L(r_2)