闭包分析的约束条件是一个可以在立方时间内解决的通用类的实例。许多问题都属于这个类别,因此我们将更仔细地研究算法。

程序表示:

目标:

数据结构:

算法:

  1. 初始化:所有的集合都是空集合
  2. 算法过程:对于每一个约束,进行计算
    1. addToken:x有一个结果是表示函数t
    2. addEdge:y是x的后继,也就是说x有的结果,都需要传递到y
    3. propagate:从已经更新好的结果里面,把每一个(t,x)对取出来,进行传递更新
      1. x.cond(t)表示如果t成立的时候,有一组 $y \subseteq z$ 需要更新。当前是(t,x),也就是x.cond(t)条件成立的时候,需要有传递,那么这个时候出现了t,就需要先构建这个边。并且传递信息
      2. 对于x的后继y,更新结果

Untitled

时间复杂度:O(n^3)