设G =(V,E,r)有根有向图,由一组顶点V和一组边E定义,具有指定的根节点r。 图表可能包含周期。任务:给定V中的两个顶点x和y,找到从x到y的所有路径。
由于允许循环,路径集显然可以是无限的。因此,我想以正则表达式(Kleene Algebra)的形式找到路径集。以下是一些示例:Examples graphs。乘法表示序列,因此路径abc表示先是a,然后是b,然后是c。一组路径a(b + c + d)表示首先是a,然后是b,c或d。克莱恩星a *表示a重复零或更多,a +重复一次或多次。
现在我正在寻找一种通过算法构建这些表达式的方法。到目前为止我想出了什么:
最后:
不确定这是否会起作用,但是,最坏情况的复杂性也会超过2 ^ n。有没有人知道这个或类似问题的算法?
答案 0 :(得分:0)
您的算法的一般想法似乎是合理的。但是,我猜测在你需要编写代码的反向跟踪步骤中可能会有很多特殊情况。特别是,我没有看到一个简单的方法来考虑周期内的周期,即(路径)*本身包含一个需要Kleene星的术语。
我有单独的建议。该图表可以转换为NFA,允许使用任何well known algorithms将NFA转换为正则表达式。
将图表转换为NFA: