Page 369 - 《软件学报》2026年第5期
P. 369

2248                                                       软件学报  2026  年第  37  卷第  5  期



                 1.  sg j (i) ← ∅,Q ← ∅;
                 2. label ← the key of the middle node in sq j ;
                 3. Q ← get node from L KN (P i , label);
                 4. FOR each u in Q DO
                 5.  match nodes of the first level of sq j ;
                 6.  match nodes of the third level of sq j ;
                 7.  IF match all nodes of the sq j  THEN
                 8.   sg j (i).push(all matches nodes);
                 9.   IF  u ∈ B THEN
                 10.    FOR each v in all matches nodes and  v ∈ ( j , i) DO
                 11.     P i  ← P i ∪P j ;
                 12.    END FOR
                 13.   END IF
                 14.  END IF
                 15. END FOR
                 16. RETURN sg j (i).

                    例如, 在图   4  所示的划分区域    P 3 中匹配图  8(b) 中的模式子图    sq 1 时, 由于该模式子图的中间顶点标签为          a, 则
                 根据  L KN (P 3 , a) 列表将候选顶点集合初始化为{17, 0}. 然后逐一去访问该集合中的顶点, 其中顶点               17  的入度为  0,
                 无法匹配第    1  层顶点. 当访问到顶点     0  时, 其双向广度优先遍历一步后, 分别找到了可匹配模式子图                 sq 1 第  1  层和
                 第  3  层的顶点, 即{17}和{1, 2}. 但由于顶点   0  属于边界顶点, 并且其中匹配的顶点         2  属于其他划分区域, 因此需将
                 划分区域   P 3 更新为  P 3 ∪P 1 , 接下来则在更新后的划分区域     P 3 中匹配其他模式子图.
                  4.4.3    模式图匹配
                    为加快模式图匹配算法的执行效率, 本文还给出了相应的剪枝策略, 即当划分区域                          P i 不可匹配其某一个模式
                 子图  sq j 时, 则说明在该划分区域中不存在可以匹配模式图的子图, 可直接返回                   sg j (i) 为空. 除此之外, 按照最优匹
                 配顺序逐一匹配模式子图的过程, 也可以看作是不断缩小最终结果的过程, 也可视为一种剪枝. 划分模式图后得到
                 的最优匹配顺序, 可最大程度上约束后匹配的模式子图中的顶点, 使得在匹配后序模式子图时, 仅需在已匹配的顶
                 点中选取含有中心顶点标签的顶点, 构成当前模式子图的中间顶点的候选顶点. 例如, 当在某划分区域匹配
                 图  8(b) 中的模式子图   sq 2 时, 其中的顶点  3  已被约束在了匹配模式子图        sq 1 的结果子图中. 因此, 虽然在模式匹配
                 的过程中会不断扩大划分区域, 但匹配的模式子图的约束顶点也越来越多, 符合的匹配结果会因约束越来越少, 而
                 不会因为匹配区域的扩大而获得更多的匹配结果. 基于模式子图的匹配算法, 模式图匹配算法                             PMUI (graph pattern
                 matching on unified index) 的流程如算法  6  所示. 第  1  行初始化最终结果. 第  2–14  行为在各划分区域   P i 中匹配模
                 式图  q m : 第  5  行调用  4  模式子图的匹配算法在各划分区域       P i 中匹配模式子图    sq j , 并得到匹配结果  sg j (i). 第  6–9
                 行用于判断是否满足剪枝条件. 第           11–13  行是对未剪枝情况的操作, 将同一划分区域中对模式子图的匹配结果做
                 连接, 得到该划分区域下对模式图          q m  的匹配结果. 第  16  行为对所有划分区域下对模式图          q m  的匹配结果做并集操
                 作. 第  17  行返回最终的匹配子图集合.
                 算法 6. 模式图匹配算法      PMUI.

                 输入: 划分覆盖    P, 模式图划分覆盖     sp, 临界顶点集合    B;
                 输出: 匹配的子图集合      g.
                 1.  g ← ∅;
   364   365   366   367   368   369   370   371   372   373   374