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

3896                                Journal of Software  软件学报 Vol.31, No.12, December 2020

             4)   所谓聚合操作,就是将误报为 0 的非叶子节点的左右孩子全部删除,因此只需遍历一次 PC 树,时间复
                                 −
                 杂度为 o(32×[|P|+|P |]);
             5)   鉴于最优前缀就是叶子节点,最优前缀生成过程就是通过遍历 PC 树来输出叶子节点,它的时间复杂
                               −
                 度为 o(32×[|P|+|P |]).
                                                                        −
             综上所述,算法的时间复杂度为各子过程之和,也就是线性阶 o(5×32×[|P|+|P |]).
             新增成员前缀优化过程包含 4 步.
             1)   插入新增的成员前缀.如图 8(f)所示,被虚线方框包围的灰色节点表示新增成员,最多比较 32 次,因此
                 时间复杂度为 o(32);
             2)   计算每个与新增成员前缀相关节点误报,相关节点数最多 32,时间复杂度为 o(32);
             3)   自顶向下逐层删除与新增成员前缀相关、误报为 0 的节点,时间复杂度为 o(32);
                                                                                           −
             4)   输出新增叶子节点,如图 8(g)所示,被虚线圆圈包围的节点表示新增最优成员前缀,同时更新 P .
             综上所述,新增成员的时间复杂度为 o(4×32).
             删除成员前缀优化过程包含 5 步.
             1)   将树中与 f 1 相关节点的孩子都补全,使它们成为完全二叉节点.如图 8(h)所示,虚线方框内节点的孩子
                 都需补齐,遍历节点最多 32 个,时间复杂度也为 o(32);
             2)   删除节点 f 1 .如图 8(g)所示,被虚线方框包围的灰色节点就是将要被删除节点,最多比较 32 次,因此时
                 间复杂度为 o(32);
             3)   更新节点误报,时间复杂度为 o(32);
             4)   删除所有白色节点,时间复杂度为 o(32);
                                                                                              −
             5)   输出更新后的叶子节点,如图 8(j)所示,被虚线圆圈包围的节点表示最优成员前缀,同时更新 P 和 P .
             综上所述,删除成员前缀优化的时间复杂度为 o(5×32).
                                                      −
                                                                                             −
                                                         −
                                                                                          -
             图 8 中,假设新增成员前缀为 f 1 =198.3.2.0,P=f 1 ∪P,P =P −f 1 .删除成员前缀为 f 2 =198.3.9.0,P=P−f 1 ,P =P ∪f 1 .
         被虚线方框包围的灰色节点表示新增成员网络前缀,被虚线方框包围的灰色节点表示删除成员网络前缀.
                  /20      >0          >0         >0             >0            >0
                         >0     >0   >0    >0    >0    >0       >0    >0      >0    >0
                  /21
                       0   >0  0   0   >0  0   0  >0   0  >0  0  >0  >0  >0  0  >0  >0  >0
                  /22
                       0  0  0          0          0  0  0        0 >0  0       0 >0  0
                  /23
                           局部更新                     0   0  局部更新    0   >0        0
                  /24
                      (f) 插入新节点     (g) 局部聚合   (h) 补齐局部节点    (i) 删除旧成员前缀     (j) 生成最优前缀
                              Fig.8    An example of prefix updating procedure (from Fig.7)
                                     图 8   成员前缀更新过程举例(源于图 7)

         2.3.2    存储空间优化
             随着联盟扩张,布鲁姆过滤器数量会越来越多.鉴于存储空间是决定布鲁姆过滤器性能重要因素,而溯源路
         由器的内存空间是有限的,如何为不同的布鲁姆过滤器分配合理的存储容量,以便它们产生尽可能小的误报率,
         就显得非常重要.根据定义 10 可知,布鲁姆过滤器集规模取决于插入前缀的掩码长度.因此,该集合中元素个数
         最多不超过 32.不失一般性,本文以 32 种不同掩码长度的布鲁姆过滤器为例进行讨论.此外,假设溯源路由器可
         用存储总量为 M,掩码长度为 i 的布鲁姆过滤器的存储容量表示为 m i ,也就是 m 1 +m 2 +…+m 32 =M.根据文献[16],
         单个布鲁姆过滤器的误报率 P 计算公式如下:
   225   226   227   228   229   230   231   232   233   234   235