计算两个任意正则表达式是否有任何重叠的解决方案(假设可能)。
例如,这两个正则表达式可以通过暴力证明没有交集,因为两个解集是可计算的,因为它是有限的。
^1(11){0,1000}$ ∩ ^(11){0,1000}$ = {}
{1,111, ..., ..111} ∩ {11,1111, ..., ...11} = {}
{} = {}
但更换{0,1000}
by *
消除暴力解决方案的可能性,因此必须创建更智能的算法。
^1(11)*$ ∩ ^(11)*$ = {}
{1,^1(11)*$} ∩ {^(11)*$} = {}
{1,^1(11)*$} ∩ {11,^11(11)*$} = {}
{1,111,^111(11)*$} ∩ {11,^(11)*$} = {}
.....
在另一个类似的问题 one answer是计算交集正则表达式。这可能吗?如果是这样,人们将如何编写算法来完成这样的事情?
我认为这个问题可能是停止问题.罢工>
EDIT:
我已使用公认的解决方案为示例问题创建 DFA。很容易看出如何在状态图上使用 BFS 或 DFSM_3
确定最终状态是否来自M_3
是可达的。