背景:“k-wise独立性”概念出现在MIT的《Introduction to Algorithms》(算法导论)第3版中。在计算机科学里,如果从哈希函数族中随机选择一个函数,可以保证任意指定的k个键的哈希码都是独立随机变量,则称散列函数族为k-独立(k-independent)、k-wise独立(k-wise independent)或k-通用(k-universal)。对于这样的哈希函数族,即使输入数据是由对抗者(adversary)选择的,在随机算法或数据结构中具有良好的平均情况下性能。人们对哈希函数的独立度(degree of independence)和计算效率之间的权衡进行研究,并提出了许多k-独立族。
哈希技术的目标通常是将一些大的数域(总体)U的键映射到一个较小的范围,如[m]分箱(bin)(标记为[m]=1,⋯,m-1)。在分析随机化算法和数据结构时,通常希望各种键值的哈希码“表现随机”。例如,如果每个键的哈希码是[m]中的一个独立随机选择,则可以使用Chernoff界来分析每个分箱的键的数量。确定性哈希函数不能在对抗环境中提供任何此类保证,因为对抗者可能会选择键值作为分箱(bin)的前映像。此外,确定性哈希函数不允许再次哈希:有时输入数据对哈希函数不利(如冲突太多),因此需要更改哈希函数。
解决这些问题的方法是从一大类哈希函数中随机选取一个函数。选择哈希函数的随机性可用于保证任何感兴趣键值的哈希码想要的某些随机行为。第一个定义是通用哈希,它保证了任意两个指定的键值的低冲突概率。Wegman和Carter在1981年引入的k-独立哈希的概念,加强了对k个指定键值的哈希函数族随机行为的保证,并增加了对哈希码均匀分布的保证。
严格定义:(Wegman和Carter):哈希函数族
H
=
h
:
U
→
[
m
]
H={h:U→[m]}
H=h:U→[m]是k独立的,如果对于任意k个不同的键
(
x
1
,
⋯
,
x
k
)
∈
U
k
(x_1,⋯,x_k)∈U^k
(x1,⋯,xk)∈Uk和任意k个哈希码(不一定不同)
(
y
1
,
⋯
,
y
k
)
∈
[
m
]
k
(y_1,⋯,y_k )∈[m]^k
(y1,⋯,yk)∈[m]k,我们有:
Pr
h
∈
H
[
h
[
x
1
]
=
y
1
∧
⋯
∧
h
[
x
k
]
=
y
k
]
=
1
m
k
\Pr\limits_{h \in \mathcal{H}}{\left\lbrack {h\left\lbrack x_{1} \right\rbrack = y_{1} \land \cdots \land h\left\lbrack x_{k} \right\rbrack = y_{k}} \right\rbrack = \frac{1}{m^{k}}}
h∈HPr[h[x1]=y1∧⋯∧h[xk]=yk]=mk1
这个定义相当于以下两个条件:
1.对于任何固定的x∈U,由于h是从H中随机抽取的,因此
h
(
x
)
h(x)
h(x)均匀地分布在[m]中;
2.对于任何固定的、不同的键值
x
1
,
⋯
,
x
k
∈
U
x_1,⋯,x_k∈U
x1,⋯,xk∈U,由于h是从H中随机抽取的,因此
h
(
x
1
)
,
⋯
,
h
(
x
k
)
h(x_1 ),⋯,h(x_k)
h(x1),⋯,h(xk)是独立随机变量。
举例:在亚线性空间的数据流算法中:
拔河草图的哈希函数是4-wise独立;
计数最小值草图的哈希函数是2-wise独立。
Apple的计数均值草图算法的哈希函数是3-wise独立。