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

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


                 的     CBS  算法变体.
                 2.1   固定概率采样算法
                    固定概率采样算法 (fixed probability sampling) 即使用固定概率 r 对图流中的每一条边进行采样. 每当图流中
                 有新边到达时, 算法运行一个满足概率为 r 的伯努利分布的随机函数, 当函数返回值为 1 时, 将新边加入样本集
                 合, 否则便丢弃该边. 该采样方法被之前的许多三角形估算工作采用                     [28,30] . 可以使用固定概率采样维护样本图, 计
                                                  3
                 数样本图中的三角形数目, 并将其乘以            1/r  来估算快照图中的三角形数目. 固定概率采样可以适用于滑动窗口模
                 型, 只需要实时删除样本集合中的过期样本边即可. 但是在滑动窗口模型下, 固定概率采样算法的样本集大小为
                 r ×|W|, 其中  |W| 为滑动窗口中的总边数. 虽然滑动窗口在时间尺度的长度                N  是固定的, 但其中边数     |W| 会随着图
                 流的流量, 也就是单位时间到达的新边数量, 而发生较大改变. 这导致固定概率采样算法的样本集大小会随着图流
                 流量而不断变化, 我们无法提前预测其上限. 因此, 也无法给出其空间占用的上限, 这会导致在空间紧张的应用场
                 景中难以对内存分配进行规划.

                 2.2   SWTC 算法
                    Gou 等人  [16] 提出的 SWTC 算法是滑动窗口模型下具有固定空间占用的三角形近似估算算法. 在图                       3  中给出
                 了算法的框架图. 该方法基于优先级采样 (priority sampling)       [37] . 它首先使用一个随机函数     H(·) 将图流中的每一条
                                                                                                   G(·) 为
                 边划分到   K  个子流中的一个, 其中      K  为提前设定的参数. 之后 SWTC 使用另一个服从均匀分布的随机函数
                 每一条边   e 分配一个在    (0,1) 内的优先级  G(e), 之后, 算法尝试在每个子流中找到滑动窗口内优先级最高的边作为
                                                        K  的样本集. 由于子流划分和优先级赋予都是随机的, 所以每条
                 样本边. 最终这些样本边便组成了一个大小不超过
                                                                         G(·) 替换为哈希函数, 算法也可以支持二
                 边都有相同的概率被采样, 该样本集是一个无偏的样本集. 通过将                    H(·) 和
                 项计数语义.


                              H(·)   子流 1
                                                                                    根据采样概率,
                                               使用函数        尝试在每个                    按比例放大样本
                           图流        子流 2      G(·)为每      子流内采样         样本图        图中的三角形数
                                               条边计算        滑动窗口中                    目以估算滑动窗
                                       …         权重        权重最高的                    口中三角形数目
                                     子流 k                     边


                                                    图 3 SWTC  算法框架

                    在该算法流程中, 主要的技术挑战有两点, 如何使用固定空间维护每个子流中在滑动窗口内的优先级最高的
                 边, 以及如何计算滑动窗口中每个三角形被加入样本图的概率. 后者需要在根据样本图中三角形数目估算滑动窗
                 口中三角形数目时使用, 而为了计算该概率, 主要挑战在于估算滑动窗口中的边数. 下面分别对这两点挑战及
                 SWTC  的解决办法进行介绍.
                    ● 子流中样本边的维护: 具体来说, 该阶段的挑战来自样本边的过期. 在没有边过期时, 维护优先级最高的边
                                                                                 e
                 较为简单. 只需要使用一个变量          ϵ  来维护目前优先级最大的边, 每当子流中有新边   到达时, 对比               G(e) 和  G(ϵ), 并
                   G(e) 更高时使用        ϵ. 然而, 当   过期时, 如何选择其后继则会变得很困难. 子流中存在   之后到达的边, 它
                                                                                         ϵ
                                              ϵ
                 在              e 替换
                                                                                       ϵ
                 们仍未过期, 但是由于优先级低于          ϵ  而没有被选为样本边, 算法没有保存它们, 也无法判断   过期后滑动窗口中优
                 先级最高的边是否在它们之间, 因此难以重新选出样本边. 举例来说, 在图                      1  中, 假设图流中时间戳在     (0,6] 内的  4
                                 G(v 1 ,v 4 ) = 0.9 G(v 2 ,v 3 ) = 0.6 G(v 5 ,v 6 ) = 0.8 G(v 3 ,v 6 ) = 0.2. 在时刻 6, 滑动窗口内优先级最高
                                                                  ,
                                                       ,
                                            ,
                 条边的优先级分别为
                 的边是   (v 1 ,v 4 ), 算法将其保存为样本边, 而非样本边则没有被保存. 在时刻 7, 边         (v 1 ,v 4 ) 过期, 而算法没有保存滑动
                 窗口内其他    3  条边, 因此无法找到当前滑动窗口中优先级最高的边. 在时刻 8, 边                 (v 1 ,v 7 ) 到达时, 也无法确定其优
                 先级和滑动窗口内其他        3  条边优先级的大小关系, 难以确定是否应当采样              (v 1 ,v 7 ).
   438   439   440   441   442   443   444   445   446   447   448