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

苟向阳 等: 高精度滑动窗口模型下的图流三角形近似计数算法                                                   4361



                 6.   for  i = 0; i ⩽ min(d,y−1); i++ do
                      τ i = 0
                 7.
                 8.    E exp ← G s  中时间戳不大于  T +∆T − N  的边

                      (⌊       ⌋  )
                       (T +∆T)d     N
                 9.   l =       −d ×
                          N          d
                 10. while  E exp , ∅ do
                      e ← E exp  中时间戳最小的边
                 11.
                 12.  if  e.ts > l then
                 //计数该过期边组成的三角形
                 13.     v i ,v j ← e 的两个端点
                       ∆ s = ∅
                 14.
                 15.   for  v k ∈ G s .FindNeighbor(v i )∩G s .FindNeighbor(v j ) do
                         δ = [(v i ,v j ),(v i ,v k ),(v j ,v k )]
                 16.
                 17.       ∆ s = ∆ s ∪{δ}
                              |∆ s |
                 18.     τ exp + =
                             p(3)
                 19.  从   G s  和   E exp  中删除  e
                 20.  T = T +∆T

                    与原方法相比, 该方法额外增加了对于             τ exp  计数器的更新. 当前时刻增加     ∆T  时, 首先计算是否会经过路径点
                                  y = ⌊(T +∆T)d/N⌋−⌊Td/N⌋ 大于                          τ exp  设置为  0, 因为其中
                 并产生新的区间. 如果                                0, 说明经过了 y 个新区间, 首先将
                 统计的是旧的     I d  内的过期三角形数目, 现在旧的      I d  已经不再与滑动窗口相交,      τ exp  的旧值也不再需要. 之后算法使
                 用算法 2  相同的流程更新三角形计数器           τ 0 τ d . 之后算法收集   G s  中的过期边集合  E exp , 并计算更新后  I d  的左端点
                                                   –
                 l. 算法按时间戳从小到大的顺序扫描           E exp  中的每条边  e, 当   e > l 时, 计数其在  G s  中形成的三角形数量, 并在除以概
                                                                     I d  内, 而是在已经不与滑动窗口相交的更早区
                 率 p(3) 后累加到   τ exp  上. 注意可能出现  e ⩽ l 的情况, 这时说明 e 不在
                 间内, 它形成的三角形也不在         I d  内, 不需要对其进行计数. 之后算法从       G s  中删除 e. 需要注意的是, 算法按照时间
                 顺序处理过期边, 是为了避免重复计数            G s  中包含多条过期边的三角形. 最后, 设置        T = T +∆T .
                                                                                  ∑ d
                    改进后的 CBS 算法中, 处理图流新边的方法和算法 1              一致. 而查询时, 需要返回          τ i −τ exp  的值.
                                                                                    i=0
                                                     τ exp  时只使用了样本边的信息, 相比采样前计数策略不够精准. 但是
                    需要注意的是, 估算      I d  内过期三角形数目
                 由于只用该方法估算不超过一个区间的小范围内的三角形数目, 其估算误差对整个滑动窗口内三角形数目估算的
                 影响较小. 第 4 节的实验表明, 改进后的 CBS 算法能取得比 SWTC 算法低 70% 的平均误差.

                 3.3   数学分析
                    本节我们对 CBS 算法进行数学分析, 包括估算无偏性证明、方差分析和算法复杂度分析.

                 3.3.1    无偏性分析
                    定理  2. 结合了 ETM 误差修正之后的 CBS 算法能够提供滑动窗口内三角形数量的无偏估算.
                    证明: 假设改进后的 CBS 算法的三角形数目估算值为               τ, 则有:

                                                     (      )          (  )
                                               E (τ) = E τ int −τ exp = E (τ int )− E τ exp           (2)
                         ∑  d
                 其中,  τ int =  τ i, 也就是   d +1 个与滑动窗口相交区间内的有效三角形数目估算值之和. 而              τ exp  则是  CBS  对区间
                            i=0
                 I d  内的过期有效三角形的数目估算值.         E(·) 表示变量的期望值. 我们依次对它们的期望进行分析. 首先是                τ int :

                                                              )
                                                           d       d
                                                        (∑       ∑
                                                E (τ int ) = E  τ i =  E(τ i )                        (3)
                                                           i=0     i=0
                    本文用   ∆ i  表示时间戳在区间    I i  内的有效三角形集合. 对于每一个三角形          δ ∈ ∆ i , 设置一个变量  ξ(δ). 假设  δ 中
   445   446   447   448   449   450   451   452   453   454   455