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

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


                 左双亲结点.在所有孩子结点中,最大标签的孩子称为最右孩子结点,最小标签的孩子称为最左孩子结点.
                    定义 12.  在网树中,一个结点可以到达不止一个根结点,结点可到达的最小根结点称为 minroot,最大根结点
                 称为 maxroot.根结点的 minroot 和 maxroot 都是它本身.同理,网树中的结点可以到达不止一个绝对叶子结点,
                 结点可到达的最小绝对叶子结点称为 minleaf,最大绝对叶子结点称为 maxleaf.绝对叶子结点层的 minleaf 和
                 maxleaf 都是它本身.
                    定义 13.  选择最小树根结点,并迭代最左孩子形成的完全路径称为最左孩子路径.类似地,我们有如下 3 种
                 定义:选择最小绝对叶子结点,并迭代最左双亲形成的完全路径称为最左双亲路径;选择最大绝对叶子结点,并
                 迭代最右双亲形成的完全路径称为最右双亲路径;选择最大树根结点,并迭代最右孩子形成的完全路径称为最
                 右孩子路径.
                    引理 4.  如果存在两条完全路径 A 和 B,若这两条路径没有经过相同的网树结点,则称 A 和 B 对应的出现为
                 无重叠出现.
                                                                       b
                    证明:完全路径 A 和 B 分别表示为 n〈        1 a  ,n  2 a  ,...,n 〉  a m  和 nn〈  1 b  ,  2 b  ,...,n 〉 ,对应的两个出现为 L A =〈a 1 ,a 2 ,…,a m 〉和
                                                                        m
                                                  1  2   m      1  2   m
                 L B =〈b 1 ,b 2 ,…,b m 〉.因为 A 和 B 不包含相同结点,所以对于任意的 i(1≤i≤m),满足 a i ≠b i .因此,L A 和 L B 为两个无重
                 叠出现.证毕.                                                                              □
                    根据无重叠出现的定义,序列中的字符并非是只可使用一次的,如何判断某一字符是否可以重复使用是一
                 个难题.与其他无重叠模式匹配算法相比,使用网树结构可以高效地处理无重叠条件,只需保证每层每个结点最
                 多使用一次即可.例 6 用于说明这一特点.
                    例 6:根据给定序列串 S=atatgtagatgattga 和模式串 P=a[0,2]t[0,2]g[0,1]a,可得到如图 3 所示的网树.

                                               1   3        7   9   12  16

                                               2   4    6   10      13  14
                                               5        8   11      15

                                               7        9   12      16
                              Fig.3    NetTree of pattern P=a[0,2]t[0,2]g[0,1]a in sequence S=atatgtagatgattga
                                 图 3   模式 P=a[0,2]t[0,2]g[0,1]a 在序列 S=atatgtagatgattga 上的网树
                    在图 3 中,可以找到所有满足间隙约束的出现,分别是〈1,2,5,7〉,〈1,4,5,7〉,〈3,4,5,7〉,〈3,6,8,9〉,〈7,10,11,12〉,〈9,10,
                 11,12〉,〈12,13,15,16〉,〈12,14,15,16〉.易知,〈1,2,5,7〉与〈3,4,5,7〉是重叠的出现,因为这两个出现都使用了第 3 层的结
                                                                                                 7
                                   7
                    5
                 点 n 和第 4 层的结点 n ;而出现〈1,2,5,7〉与出现〈7,10,11,12〉就是两个无重叠出现,因为在网树中,结点 n 与结点
                    3              4                                                             1
                  7
                 n 为不同结点.
                  4
                 3.2   NetBack算法
                 3.2.1    创建网树
                    我们通过例 7 来展示创建网树的原理,并说明网树所具有的优势.
                    例 7:给定与例 6 相同的模式串与序列串,若长度约束为 LEN=[5,7],则利用网树结点的 minroot 和 maxroot
                 及 minleaf 和 maxleaf,可以有效地处理长度约束.具有最小、最大根及最小、最大叶子标记的网树如图 4 所示.
                    在图 4 中,结点右上的标记为此结点可到达的 minroot 和 maxroot,右下的标记为此结点可到达的 minleaf
                                                       4
                 和 maxleaf.这里以 s 4 =t 为例,说明如何创建结点 n 并计算其 minroot 和 maxroot 值.由于 s 4 =t=p 2 且 4−1−1=2 满
                                                       2
                                                                                               1
                                          4
                                                     1
                 足[0,2]间隙约束,此时创建结点 n ,并与结点 n 建立父子关系,使其 minroot 和 maxroot 值与结点 n 的 minroot
                                                     1
                                                                                              1
                                          2
                                                                             4
                                                4
                                                                                     3
                                                        3
                 和 maxroot 值一致,均为 1;又由于结点 n 与结点 n 也满足间隙约束,故结点 n 与结点 n 也建立父子关系,同时,
                                                                                     1
                                                                             2
                                                2
                                                        1
                                                                                            4
                      4
                                                                           4
                                             3
                 结点 n 的 minroot 从当前 1 和结点 n 的 minroot=3 中选择最小值,故结点 n 的 minroot=1;结点 n 的 maxroot 从
                                                                           2
                      2
                                             1
                                                                                            2
   6   7   8   9   10   11   12   13   14   15   16