Page 229 - 《软件学报》2020年第12期
P. 229

鲁宁  等:联盟模式下高效单包溯源方法研究                                                            3895


             •   同时,将操作结果加入 P,形成新的成员前缀集 P′;
             •   然后,在 P′中展开新一轮聚合误报率计算,直到新的成员前缀集中没有误报率为 0 的聚合.
             上述算法虽然简单有效但是不支持增量计算,考虑到 P 中元素会随着联盟成员的加入或退出而随时调整,
         若总是无法利用已有计算结果而重新开始一轮计算,那么整个过程会产生非常大的计算开销.为此,借鉴文献
         [15]提出的最长公共前缀树,本文提出一种新的数据结构——前缀压缩(prefix compression,简称 PC)树,以此为
         基础,提出可增量的成员前缀优化算法.
             成员前缀优化过程应包含 5 步.
                                               −
             1)   构建 PC 树,其中,叶子节点由 P 和 P 元素组成,非叶子节点则由它们孩子的公共前缀组成.如图 7(a)
                                                          −
                 所示,黑色节点表示 P 中成员前缀,白色节点表示 P 中非成员前缀,星形节点表示中间聚合前缀.与已
                 有的 LCP 树不同,PC 树的叶子节点按层次分类,只有同层次节点才可能发生聚合;
             2)   计算每个节点 x 误报情况ρ(x),具体公式如下:
                                            ⎧ >  0,          x =  Leaf  , x∈  P
                                       ρ ( ) x =  ⎪ 0,             x = ⎨  Leaf  , x∈  P −     (7)
                                            ⎪
                                            ⎩ ρ  L  ρ ∧  R , 其他
                 如图 7(b)所示,黑色节点的误报ρ 1 为 0,白色节点的误报ρ 2 >0.星形节点的误报ρ 3 =ρ L ∧ρ R ,其中,ρ L 表示其
                 左孩子误报,ρ R 表示其右孩子误报.当ρ L =0 且ρ R >0 时,得ρ 3 >0;当ρ L >0 且ρ R =0 时,得ρ 3 >0;当ρ L >0 且ρ R >0
                 时,得ρ 3 >0;当ρ L =0 且ρ R =0 时,得ρ 3 =0;当ρ L =∅,得ρ 3 =ρ R ;当ρ R =∅,得ρ 3 =ρ L ;
             3)   剪去 PC 树中所有白色无用节点.如图 7(c)所示:黑色叶子因参与前缀优化,故留下;而白色叶子因节点
                 误报情况已经获得,故删除;
             4)   执行前缀聚合,生成最优树.如图 7(d)所示,由底向上逐层删除所有父亲误报为 0 的叶子节点;
             5)   生成最优的成员前缀.如图 7(e)所示:只需依据广度优先来遍历 PC 树中所有叶子节点,就能获得最优
                 的成员前缀,即被虚线圈包围的节点.

                        198.3.0.0/20
                  /20                   >0            >0             >0
                          0  1        >0     >0      >0    >0      >0    >0
                  /21
                       0 1    0 1   >0  >0  0  >0  >0  >0  0     >0  >0  0
                  /22
                      0 1  0 1  0 1  0 >0 >0  0 >0  0  0  0 0  0  0   0
                  /23
                            0 1                          0  0
                  /24
                      (a) 构建PCB 树     (b) 计算误报     (c) 剪去白叶子     (d) 完成聚合    (e) 生成最优前缀
                         Fig.7    An example of prefix optimization procedure (from Fig.1 and Fig3)
                                  图 7   成员前缀优化过程举例(源于图 1 和图 3)
                                                                              −
             图 7 中,假设 P={198.3.0.0/23,198.3.6.0/23,198.3.10.0/23,198.3.8.0/24,198.3.9.0/24},P ={198.3.2.0/23,198.3.4.
         0/23,198.3.12.0/22}.黑色节点表示成员网络前缀,白色节点表示非成员网络前缀,星形节点表示聚合前缀,被虚
         线圈包围的节点表示优选出的成员网络前缀.
             上述过程的时间复杂度分析如下.
                                       −
             1)   构建 PC 树需要执行|P|+|P |次前缀插入操作,每次插入最多比较 32 次,因此,它的时间复杂度上界为
                           −
                 o(32×[|P|+|P |]);
             2)   若采用分治策略来计算节点误报,通过构建递归树,已知每个节点需要计算一次,那么整体时间复杂
                                   −
                 度上界为 o(32×[|P|+|P |]);
                                                                                       −
             3)   只有通过遍历一次 PC 树才能剪去所有白叶子节点,它的时间复杂度上界为 o(32×[|P|+|P |]);
   224   225   226   227   228   229   230   231   232   233   234