D(m,n)是一个长度为
m, 包含
n个不同元素的信息流 (stream). 假设这些元素分别为
[1,2,⋯,n],
fi是元素在信息流中
i的频数. 假设
g()是任意一个函数, 则我们将
∑i=1ng(fi)称为频数向量的
g−sum.
如果
g()是单调函数并且
g(fi)≤O(fi2), 则用于估计
G−sum的具有多重对数型空间复杂度的信息流算法(streaming algorithm)是存在的.
Stream−PolyLog是所有存在对应的多重对数型空间复杂度的信息流算法的
G−sum的集合.
对于元素
i∈[1,2,⋯,n], 如果
g(fi)>γ∑jg(fj), 其中
0<γ<1, 则我们称
i为一个g-重型元素 (g-heavy element 或 g-heavy hitter).
G−core是所有g-重型元素的集合.
已有文献证明, 对于元素
[1,2,⋯,n], 它的频率向量是
[f1,f2,⋯,fn], 如果某个元素是频率向量的L2范数的重型元素, 则它也是这个频率向量的g-重型元素.
UnivMon包括两部分, 即在线测量部件和离线估计部件. 在线测量部件的工作流程如算法1所示. 其工作流程可具体描述如下.信息流
D(m,n)={a1,a2,⋯,am}中共有
n个不同的元素. 令
d=log2n. 我们建立
d+1个梗概. 我们将这些梗概分别记为
S0,S1,⋯,Sd. 此外, 梗概
S1,S2,⋯,Sd分别对应于哈希函数
h1,h2,⋯,hd, 且
hk() (k=1,2,⋯,n)可以将一个元素随机地映射到0或者1. 当元素
ai到达的时候, 我们将其插入
S0中, 并且在其上查找L2-重型元素, 并将找到的重型元素插入
Q0中. 之后, 对于
Si (i=1,2,⋯,d), 我们依次进行如下操作: 如果
h1(ai)⋅h2(ai)⋯hi(ai)=1, 则我们将
ai插入梗概
Si中, 并且在
Si上查找L2重型元素, 之后将找到的重型元素存入
Qi中.
以上过程处理完成以后, 我们就得到了
d+1个序列
Q0,Q1,⋯,Qd, 分别用于从数据平面的梗概
S0,S1,⋯,Sd从提取出来的L2重型元素. 之后我们使用算法2来获取对
G−sum的估计, 即对
∑0ng(fi)的估计. 在算法2中,
wj(i)是
Qj中的第
i个哈希桶中的元素的计数值.
这篇文章的主要逻辑就是, 如果我们的目标是求
G−Sum=∑i=1ng(fi), 其中
g(n)的复杂度是
O(n2), 那么我们可以先使用重型元素(heavy hitters)检测的方法求出L2范数的重型元素, 之后再用算法2所述的方法来精确地恢复出
G−Sum. 这里涉及到两个问题. 首先, 如果我们要求
∑i=1ng(fi), 其中
g(fi)的复杂度是
O(fi2), 那么我们可以直接求
fi2意义上的重型元素, 因为
fi2意义上的重型元素也是
g(fi)意义上的重型元素. 其次, 求
∑i=1ng(fi)可以转化成为求重型元素的g()函数值之和. 如算法而所示, 我们有
log(n)+1个序列
Q0,⋯,Qlog(n). 其中,
Qi对应于对输入信息流进行
2i1采样之后得到的
fi2意义上的重型元素. 之后我们采用算法2的方法对这些元素进行处理, 最后可以几乎无损地恢复
∑i=1ng(fi)的值. 算法2的具体原理可以参考此处.