Page 447 - 《软件学报》2025年第9期
P. 447

4358                                                       软件学报  2025  年第  36  卷第  9  期


                                                             (T − N,T] 之内的有效三角形, 其     3  条边的时间戳都在区
                 在   (T − N,T] 之内的有效三角形. 反之, 对于一个时间戳在
                 间  (T − N,T] 内, 也就是在滑动窗口中, 因此这     3  条边都在快照图中, 该三角形也一定在快照图中.
                                                        (T − N,T] 之内的有效三角形的数目. 为实现这一目标, CBS            使
                    为计算快照图中的三角形, 需要计数时间戳在
                 用 SWTC 算法维护滑动窗口内的无偏样本集合, 同时使用采样前计数策略估算时间戳落在每一个区间内的有效
                 三角形的数目. 之后将与滑动窗口相交的区间内的有效三角形数目加和, 这些三角形是时间戳在                           (⌊Td/N⌋× N/d − N,T]
                                                 (T − N,T] 内的有效三角形数目的近似值. 由于每个区间的起点和终点是
                 内的有效三角形. 使用它来作为时间戳在
                 固定的, 计数区间内的有效三角形数目时不需要处理数据过期.
                    在图  6  中, 时间戳在区间    3, 即   (6,9] 中的有效三角形有 2 个, 分别是    [(v 6 ,v 8 ),(v 1 ,v 8 ),(v 1 ,v 6 )] 和  [(v 1 ,v 7 ),(v 1 ,v 8 ),
                                       (9,12] 中的有效三角形有     1        [(v 1 ,v 8 ),(v 1 ,v 2 ),(v 2 ,v 8 )]. 目前还没有时间戳在区
                 (v 7 ,v 8 )], 时间戳在区间 4, 即                  个, 也就是
                 间 5  中的三角形, 但是需要注意的是, 时间戳在一个区间内的有效三角形不一定只包含该区间内的边, 例如三角形
                 [(v 6 ,v 8 ),(v 1 ,v 8 ),(v 1 ,v 6 )] 中, 边  (v 1 ,v 8 ) 和边  (v 1 ,v 6 ) 在区间  4  中, 但是由于边  (v 6 ,v 8 ) 在区间  3  中且其时间戳最小, 所以
                 该三角形的时间戳依然在区间           3  中.
                    算法 1  给出了 CBS 算法处理图流中一条新边的流程.

                 算法  1. CBS 处理图流新边.
                 输入: 图流中的新边      e = (v i ,v j ), 样本图  G s , 三角形计数器  τ 0 τ d ;
                                                               –
                 输出: 更新后的样本图和三角形计数器.

                 //计数新边在样本图中构成的三角形
                 1.  ∆ s = ∅
                 2. for  v k ∈ G s .FindNeighbor(v i )∩G s .FindNeighbor(v j ) do
                 3.    δ = [(v i ,v j ),(v i ,v k ),(v j ,v k )]
                 4.    δ.ts = min{(v i ,v j ).ts,(v i ,v k ).ts,(v j ,v k ).ts}
                 5.    ∆ s = ∆ s ∪{δ}
                 //增加每个三角形所在区间内的三角形计数器
                 6. for each  δ ∈ ∆ s  do
                        ⌊  ⌋
                         Td   N
                 7.      l =  ×
                          N   d
                 8.   if  δ.ts > l then
                 9.     x = 0
                 10.  else
                          ⌊       ⌋
                           (l−δ.ts)d
                 11.     x =       +1
                              N
                           1
                 12.   τ x + =
                          p(2)
                 13.  Gs.TrySample(e) //对新边运行采样算法
                    CBS  维护  d +1 个三角形计数器    τ 0 τ d , 分别记录与滑动窗口相交的      d +1 个区间内的有效三角形数量的估算
                                                –
                 值, 初始值全部为     0. 其中最新的区间编号为        I 0 , 其三角形数目估算值保存在计数器  , 而倒数第           2  个区间则编号
                                                                                  τ 0
                                                                                                     e
                 为   I 1 , 其三角形数目估算值保存在计数器  , 依次类推. 对于图流中的一条新边                e = (v i ,v j ), CBS 算法首先查找   在
                                                 τ 1
                 样本图  G s  中形成的三角形集合, 如算法 1      的第  1–5  行所示. 算法寻找点    v i  和  v j  在  G s  中的每一个共同邻居  , 也就
                                                                                                  v k
                 是满足   (v i ,v k ) ∈ G s  且  (v j ,v k ) ∈ G s  的点  , 算法将三角形  [(v i ,v j ),(v i ,v k ),(v j ,v k )]  加入样本图中形成的三角形集合  ,
                                              v k
                                                                                                      ∆ s
                 并将其时间戳设置为        3  条边时间戳的最小值. 需要注意的是, 算法虽然查找了               e 可以在  G s  中产生的三角形, 但是
                 并不把   e 加入  G s , e 是否能成为样本图中的样本边, 需要在进行三角形计数之后再由采样算法来决定. 然后, 算法
   442   443   444   445   446   447   448   449   450   451   452