通用空检查算法:高效性与应用探索
1. 判定SCC是否为固有弱组件
判定一个强连通分量(SCC)是否为固有弱组件(即不混合接受和拒绝循环),可通过两次空检查实现:一次使用原始接受公式,另一次使用互补接受公式。若其中一次空检查成功,则该SCC为固有弱组件。
2. 旧版与新版空检查实现
2.1 新版算法优化
算法1已在Spot的2.8版本中实现,其实现具有以下额外优化:
- SCC枚举优化 :第2行中对图G的SCC枚举,采用基于Dijkstra的算法,该算法还会为每个SCC记录集合Moccur和Mevery。因此,第10 - 12行的测试可移至该SCC枚举算法中,且该算法可配置为一旦找到第12行(或第10行)返回⊥的SCC就停止。若找到这样的SCC,第2 - 3行的循环甚至不会执行,避免了使用更复杂条件对SCC进行一些无用的递归。
- 移除函数优化 :移除函数并非实现为返回新自动机的函数。相反,SCC枚举算法接受一组标记,用于定义哪些转换在SCC中应被禁止(这通过将标记转换的目标保留在一组二级SCC根集中实现,如Bloemen等人的Fstate)。这样可确保算法能原地运行,无需复制自动机。
- 顶级调用优化 :顶级的is_empty调用首先检查接受条件是否具有$\bigwedge_{m\in M’} Fin(m) \land \phi’$的形式。若是,则将$M’$传递给初始SCC枚举算法,并从一开始就禁止相关转换。
2.2 旧版算法情况
在算法1实现之前,Spot仅具有针
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



