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

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


                    为了解决这一问题, SWTC 采用了图流切片的策略. 它选择一系列的路径点 (landmark), 将图流切分为长度为
                 N  的定长片段. 在任意时刻  , 滑动窗口至多与最近的两个片段相交. 图                  4  展示了一个示例. 当前时刻为        13, 滑动
                                      T
                       (7,13], 和片段    (6,12] 以及片段      (12,18] 相交. 注意片段  3  是一个仍未结束的片段, 后续新到达的
                 窗口为              2, 即             3, 即
                 边仍会被加入该片段. 而等到         18  时刻, 滑动窗口将只与片段 3 相交.

                                                                        滑动窗口

                               t=1   t=3  t=5   t=6   t=7  t=8   t=10  t=11  t=12  t=13  t=13
                              (v 1 , v 4 )  (v 2 , v 3 )  (v 5 , v 6 )  (v 3 , v 5 )  (v 6 , v 8 )  (v 1 , v 7 )  (v 7 , v 8 )  (v 1 , v 8 )  (v 1 , v 6 )  (v 2 , v 8 )  (v 1 , v 2 )
                                       片段 1                      片段 2               片段 3
                                                  图 4 SWTC  图流切片示例

                                                                                          β 和  . 例如在图  4
                                                                                              ϵ
                    在任意时刻, SWTC 记录在每个子流中记录最近两个片段                 SL old  和  SL new  中优先级最高的边
                 中, 它保存片段    2 中优先级最高的边和片段         3  中目前优先级最高的边. 由于片段的起点和终点都是固定的, 在寻找
                 其中优先级最高的边时不需要处理边过期, 只需要从片段起点开始使用变量                          ϵ 记录目前优先级最高的边, 在每次
                                  ϵ
                                                                     ϵ
                                                                                                   ϵ
                 新边  e 到达时对比   e 和   的优先级, 并在   e 优先级更高时使用它替换  , 持续此操作直到片段终点. 对于               β 和  , 存在
                 下述  3  种情况, 如图  5  所示.


                                                           滑动窗口
                                        情况 1           β            ϵ
                                                     SL old       SL new  T
                                                                 滑动窗口

                                        情况 2           β            ϵ
                                                                            T
                                                    SL old         SL new
                                                                     滑动窗口
                                        情况 3           β             ϵ
                                                                                T
                                                    SL old             SL new
                                               图 5 SWTC   子流采样的不同情况

                    情况  1: 滑动窗口与    SL old  和   SL new  同时相交, 且  β 和   同时在滑动窗口中, 这时选择二者中优先级较高的边,
                                                             ϵ
                 它一定是滑动窗口中优先级最高的边, SWTC 算法将其作为该子流中的样本边.
                    情况  2: 滑动窗口依然与     SL old  和   SL new  同时相交, 但是   β 已经过期. 若  G(β) > G(ϵ), SWTC 放弃在该子流中选择
                                                              G(β) > G(e) > G(ϵ) e 应当被选为样本边, 但是没有被保
                                                                            .
                 样本边. 因为片段     SL old  中可能存在边  e, 其没有过期, 而且
                                                                                                     ϵ
                                         ϵ                                                     G(ϵ). 而   又
                 存. 若  G(β) ⩽ G(ϵ), SWTC 选择   作为样本边, 因为片段   SL old  中的边优先级都低于    G(β), 因此也低于
                 是片段   SL new  中优先级最高的边, 因此它是最近两个片段中优先级最高的边, 自然也是滑动窗口中优先级最高的
                 边. SWTC 将其选为样本边.
                    情况  3: 时间推移到路径点, 滑动窗口只和片段            SL new  相交. 这时   为滑动窗口中优先级最高的边, 算法将其选
                                                                     ϵ
                 为样本边.
                    在情况   3  之后, 滑动窗口与新的片段相交, 当前的         SL new  变为  SL old , 情况返回第  1  种, 3  种情况交替出现.

                    作者证明了在任意时刻, 一个子流中获得有效样本的概率为                     p = |W|/|SL new +SL old |. 其中   |W| 和  SL old +SL new | 分
                 别表示滑动窗口以及最近两个片段中的边数. 而               K  个子流中获取的样本边的总数期望值则为              pK.
                    ● 三角形采样概率的计算: 由于         SWTC 算法维护的样本集是滑动窗口的无偏样本集, 作者证明了在任意时刻                      T ,
                                                          (  )/(    )
                                                           m     |W|
                 滑动窗口中任意      i 条边被加入样本集的概率为         p(i) =          . 其中  m 表示  T  时刻样本边的数目. 因此, 滑动
                                                           i      i
   439   440   441   442   443   444   445   446   447   448   449