Page 15 - 《软件学报》2021年第11期
P. 15

武优西  等:无重叠条件严格模式匹配的高效求解算法                                                       3341


                 坏情况下的空间复杂度为 O(m×n×W).证毕.                                                             □
                    定理 4. NetBack 算法的时间复杂度为 O(m×n×W).
                    证明:NetBack 算法时间开销由两部分组成——创建网树和计算出现.
                                                           i
                    •   在创建网树方面,由于算法 1 的第 7 行结点 n 最多存在 W 个双亲结点,易知网树创建及更新最小、最
                                                           j
                        大根的时间复杂度为 O(m×n×W);同理,更新最小、最大叶子的时间复杂度也为 O(m×n×W).
                    •   在计算出现方面,根据定理 1 可知,每个结点最多被访问一次.根据定理 3 可知,网树上最多有个 m×n 结
                        点,因此计算出现的时间复杂度为 O(m×n).因此,NetBack 算法的时间复杂度为
                                             O(m×n×W+m×n×W+m×n)=O(m×n×W).                             □
                    例如,在例 8 中采用最左孩子路径方式,从最小树根结点开始结合回溯策略得到无重叠最小出现集,在这个
                 过程中,每个结点最多被访问一次.找到第 2 个无重叠出现〈3,6,8,9〉后,它左边的结点均不会被后面的出现使用.
                                                                                                     14
                                                                                            4
                              4
                                            7
                 也就是说,结点 n 不可能与结点 n 及它之后的根结点存在父子关系,于是无需再次访问结点 n ,而结点 n 从
                                                                                            2
                                           1
                              2
                                                                                                     2
                 未被访问.在图 5 中,白色结点均未被访问过,其他颜色结点均被访问过一次.
                 3.4   其他3种寻径算法及分析
                    除最左孩子路径(leftmost child  path)外,还存在 3 种类似的寻径方式,分别是最左双亲路径(leftmost parent
                 path)、最右双亲路径(rightmost parent path)、最右孩子路径(rightmost child path).这 4 种不同的寻径方式分别对
                 网树进行不同方向的遍历,均可与回溯策略相结合,求得无重叠严格模式匹配问题的完备解集.
                    定理 5.  最左双亲路径得到的出现与最左孩子路径得到的出现相同,也是最小出现.
                    证明:采用反证法证明.假设当前网树上最小出现 L A =〈a 1 ,a 2 ,…,a m 〉与最左双亲路径策略所获的第 1 个出现
                 L B =〈b 1 ,b 2 ,…,b m 〉是不同的.由最左双亲定义可知,b m 为第 m 层可到达树根结点层的最小绝对叶子结点.这样存在
                 如下两种情况.
                    (1)  a j 与 b j 完全不同,即所有的 a j ≠b j (1≤j≤m).由于 L A 是最小出现,因此有 a j <b j (1≤j≤m),这样 a m <b m .这就
                        是说,能够从绝对叶子层到达树根层的最小结点是 a m ,这与假定 b m 是可到达树根结点层的最小绝对
                        叶子结点矛盾.
                    (2)  a j 与 b j 局部有不同.由于 L A 是最小出现,所以有 a j <b j (1≤j≤m).我们从如下两方面进行分析:
                        ①  假定 j=m,即 a m <b m .这与情形(1)相同,这种情况与假定 b m 为第 m 层可到达树根结点层的最小绝对
                            叶子结点矛盾.
                        ②  假定 1≤j<m 且 a j+1 =b j+1 .由于 a j <b j ,且 b j+1 也是 a j 的孩子结点,即 a j 也是 b j+1 的双亲结点,因此对
                            于 b j+1 结点来说,最左双亲结点是 a j ,这与在出现 L B 中 b j+1 选择 b j 作为最左双亲结点矛盾.
                    综上,所有假设均存在矛盾,因此,L B 是与 L A 完全一致的出现,即最左双亲路径得到的出现与最左孩子路径
                 得到的出现都是最小出现.证毕.                                                                      □
                    例 9:给定与例 7 相同的模式串与序列串和长度约束,采用最小策略与回溯策略结合寻找无重叠出现.
                    根据例 8 已知:采用最左孩子路径找到的第 1 个出现为〈1,2,5,7〉,而〈1,2,5,7〉是全集 R 中的最小出现.从 R 中
                 删除〈1,2,5,7〉及与它重叠的出现后,出现〈3,6,8,9〉为当前最小出现,最左孩子路径找到的第 2 个出现就是〈3,6,8,
                 9〉.以此类推,最左孩子路径可得到无重叠最小出现集{〈1,2,5,7〉,〈3,6,8,9〉,〈7,10,11,12〉,〈12,13,15,16〉}.若采用最左
                                                          7
                                                                                5
                 双亲路径,如图 6 所示,首先访问最小绝对叶子结点 n ,向上选择最左双亲结点 n .迭代此过程,找到第 1 个出现
                                                                                3
                                                          4
                 〈1,2,5,7〉.以此类推,得到无重叠出现集{〈1,2,5,7〉,〈3,6,8,9〉,〈7,10,11,12〉,〈12,13,15,16〉}.这与最左孩子路径得到的
                 结果是一致的.
                    综上,只要采用最小策略,无论是最左孩子路径方式还是最左双亲路径方式,均能得到无重叠最小出现集.
                    例 10:给定与例 7 相同的模式串与序列串和长度约束,最右双亲路径方式寻径过程如图 7 所示.
                                                                        16
                                                                                              15
                    若采用最右双亲路径,如图 7 所示,首先选择最大绝对叶子结点 n ,向上选择最右双亲结点 n .迭代此过
                                                                        4
                                                                                              3
                                                                                                   10
                                                                 12
                 程,可得到第 1 个出现〈12,14,15,16〉.向前访问绝对叶子结点 n ,迭代选择其最右双亲结点,当选择结点 n 的最
                                                                                                   2
                                                                 4
   10   11   12   13   14   15   16   17   18   19   20