Page 150 - 《软件学报》2021年第9期
P. 150

2774                                 Journal of Software  软件学报 Vol.32, No.9,  September 2021

             算法 5. filterDomains(c):set of variables.
             begin
             1    V:=∅
             2    for each x∈scp(c) do
             3        for each a of which bitdom(x)[a]=1b do
             4            if a doesn’t have a support then
             5                bitdom(x)[a]:=0b
             6        if bitdom(x) has been filtered then
             7            if bitdom(x)=0 then
             8                inconsistent:=true
             9                return ∅
             10           V:=V∪{x}
             11   return V
             end
             算法 3 中,串行过滤算法首先更新表,即移除无效的元组(算法 4 第 4 行);进而过滤论域,即删除在该约束上
         不存在支持的值(算法 5 第 5 行);最后返回由被删值的变量所组成的集合.如果有一个变量 x 的论域被删空,即
         bitdom(x)的每个位均变为 0b,不相容标识 inconsistent 将被置为 true(算法 5 第 8 行).

         2.3   性质分析
             因为不同的串行过滤算法有不同的最坏时间复杂度,所以它们的最坏时间复杂度被统一设为 O(T).另外,我
         们用 r max 和 d max 分别表示最大的约束元数和最大的初始论域大小,即 r max =max c∈C |scp(c)|,d max =max x∈X |D(x)|.
             性质 4.  维持表约束网络 GAC 的串行传播模式的最坏时间复杂度为 O(er max d max T)            [17] .
             证明:串行传播算法中,初始化变量集合 Q 的时间代价为 O(n)(算法 1 第 2 行、第 3 行).对于 x∈scp(c),每当
         一个值(x,a)被删除后,约束 c 会被执行一次维持 GAC 的串行过滤算法,那么约束集 C 中的所有约束被执行串行
         过滤算法的总次数最多为 er max d max (算法 1 第 7 行).而执行一次串行过滤算法的时间代价为 O(T)(算法 1 第 8 行),
         将串行过滤算法返回的变量集并入 Q 的时间代价为 O(r max )(算法 1 第 11 行、第 12 行),并且其他所有语句的时
         间代价均为 O(1),所以串行传播模式的总体时间代价为 O(n+er max d max (T+r max )).又因为 n=O(er max ),且 T>>r max ,故
         维持表约束网络 GAC 的串行传播模式的最坏时间复杂度为 O(er max d max T).证毕.                                    □

         3    并行传播模式

             在本节中,我们提出了维持表约束网络 TGAC 的并行传播模式,它同样由并行传播算法和并行过滤算法两
         部分组成.之后,我们分析了并行传播模式的相关性质.
         3.1   并行传播算法
             在并行传播模式中,我们引入了一些新的数据结构.
             •   约束位标识 tableMask:由 e 个位组成的位向量,用以标记需要执行并行过滤算法的表约束,在并行传播
                模式中是被动态更新的.其第 i 个位用 tableMask[c i ]表示,tableMask[c i ]为 1b 当且仅当约束 c i 需要被执
                行并行过滤算法;
             •   位订阅 bitSbp(x):由 e 个位组成的位向量,与变量 x 的约束订阅集 sbp(x)相对应,第 i 个位用 bitSbp(x)[c i ]
                表示,bitSbp(x)[c i ]为 1b 当且仅当 x∈scp(c i ).
             通过 tableMask:=tableMask|bitSbp(x)可将 bitSbp(x)提交至 tableMask 上.
             例 3:约束网络 N 的约束集 C={c 1 ,c 2 ,...,c 8 },变量 x 和 y 的约束订阅集分别为 sbp(x)={c 4 ,c 8 }和 sbp(y)={c 1 ,c 8 },
         相应的位订阅 bitSbp(x)和 bitSbp(y)如图 2 所示.约束位标识 tableMask 初始化为 0(全部位均为 0b),将 bitSbp(x)
   145   146   147   148   149   150   151   152   153   154   155