One Sketch to Rule Them All: Rethinking Network Flow Monitoring with UnivMon阅读笔记

D ( m , n ) D(m, n) 是一个长度为 m m , 包含 n n 个不同元素的信息流 (stream). 假设这些元素分别为 [ 1 , 2 , , n ] [1, 2, \cdots, n] , f i f_i 是元素在信息流中 i i 的频数. 假设 g ( ) g() 是任意一个函数, 则我们将 i = 1 n g ( f i ) \sum_{i=1}^ng(f_i) 称为频数向量的 g s u m g-sum .

如果 g ( ) g() 是单调函数并且 g ( f i ) O ( f i 2 ) g(f_i)\le O(f_i^2) , 则用于估计 G s u m G-sum 的具有多重对数型空间复杂度的信息流算法(streaming algorithm)是存在的.

S t r e a m P o l y L o g Stream-PolyLog 是所有存在对应的多重对数型空间复杂度的信息流算法的 G s u m G-sum 的集合.

对于元素 i [ 1 , 2 , , n ] i \in [1, 2, \cdots, n] , 如果 g ( f i ) > γ j g ( f j ) g(f_i) > \gamma\sum_jg(f_j) , 其中 0 < γ < 1 0 < \gamma < 1 , 则我们称 i i 为一个g-重型元素 (g-heavy element 或 g-heavy hitter). G c o r e G-core 是所有g-重型元素的集合.

已有文献证明, 对于元素 [ 1 , 2 , , n ] [1, 2, \cdots, n] , 它的频率向量是 [ f 1 , f 2 , , f n ] [f_1, f_2, \cdots, f_n] , 如果某个元素是频率向量的L2范数的重型元素, 则它也是这个频率向量的g-重型元素.

UnivMon包括两部分, 即在线测量部件和离线估计部件. 在线测量部件的工作流程如算法1所示. 其工作流程可具体描述如下.信息流 D ( m , n ) = { a 1 , a 2 , , a m } D(m, n) = \{a_1, a_2, \cdots, a_m\} 中共有 n n 个不同的元素. 令 d = l o g 2 n d=log_2 n . 我们建立 d + 1 d+1 个梗概. 我们将这些梗概分别记为 S 0 , S 1 , , S d S_0, S_1, \cdots, S_d . 此外, 梗概 S 1 , S 2 , , S d S_1, S_2, \cdots, S_d 分别对应于哈希函数 h 1 , h 2 , , h d h_1, h_2, \cdots, h_d , 且 h k ( )   ( k = 1 , 2 , , n ) h_k()~(k = 1, 2, \cdots, n) 可以将一个元素随机地映射到0或者1. 当元素 a i a_i 到达的时候, 我们将其插入 S 0 S_0 中, 并且在其上查找L2-重型元素, 并将找到的重型元素插入 Q 0 Q_0 中. 之后, 对于 S i   ( i = 1 , 2 , , d ) S_i~(i = 1, 2, \cdots, d) , 我们依次进行如下操作: 如果 h 1 ( a i ) h 2 ( a i ) h i ( a i ) = 1 h_1(a_i)\cdot h_2(a_i) \cdots h_i(a_i) = 1 , 则我们将 a i a_i 插入梗概 S i S_i 中, 并且在 S i S_i 上查找L2重型元素, 之后将找到的重型元素存入 Q i Q_i 中.

以上过程处理完成以后, 我们就得到了 d + 1 d+1 个序列 Q 0 , Q 1 , , Q d Q_0, Q_1, \cdots, Q_d , 分别用于从数据平面的梗概 S 0 , S 1 , , S d S_0, S_1, \cdots, S_d 从提取出来的L2重型元素. 之后我们使用算法2来获取对 G s u m G-sum 的估计, 即对 0 n g ( f i ) \sum_0^n g(f_i) 的估计. 在算法2中, w j ( i ) w_j(i) Q j Q_j 中的第 i i 个哈希桶中的元素的计数值.
在这里插入图片描述
这篇文章的主要逻辑就是, 如果我们的目标是求 G S u m = i = 1 n g ( f i ) G-Sum=\sum_{i=1}^ng(f_i) , 其中 g ( n ) g(n) 的复杂度是 O ( n 2 ) O(n^2) , 那么我们可以先使用重型元素(heavy hitters)检测的方法求出L2范数的重型元素, 之后再用算法2所述的方法来精确地恢复出 G S u m G-Sum . 这里涉及到两个问题. 首先, 如果我们要求 i = 1 n g ( f i ) \sum_{i=1}^ng(f_i) , 其中 g ( f i ) g(f_i) 的复杂度是 O ( f i 2 ) O(f_i^2) , 那么我们可以直接求 f i 2 f_i^2 意义上的重型元素, 因为 f i 2 f_i^2 意义上的重型元素也是 g ( f i ) g(f_i) 意义上的重型元素. 其次, 求 i = 1 n g ( f i ) \sum_{i=1}^ng(f_i) 可以转化成为求重型元素的g()函数值之和. 如算法而所示, 我们有 l o g ( n ) + 1 log(n) + 1 个序列 Q 0 , , Q l o g ( n ) Q_0, \cdots, Q_{log(n)} . 其中, Q i Q_i 对应于对输入信息流进行 1 2 i \frac{1}{2^i} 采样之后得到的 f i 2 f_i^2 意义上的重型元素. 之后我们采用算法2的方法对这些元素进行处理, 最后可以几乎无损地恢复 i = 1 n g ( f i ) \sum_{i=1}^ng(f_i) 的值. 算法2的具体原理可以参考此处.

猜你喜欢

转载自blog.csdn.net/nankai0912678/article/details/105769494
今日推荐