L0 and l1 sampling
阅读量:
Problem Describe
- We are given stream $a_1, a_2, … a_m \in {1, … , n}$
- After we read $a_i$, we want to maintain a random number from $a_1, … , a_i$.
- Example: Example: 1 5 1 1 1
- $L_0$ sampling outputs 1 and 5 with equal probability
- $L_1$ sampling outputs 1 with probability 4/5 and 5 with probability 1/5
- Do this by maintaining one number $a_j$ from the stream plus a counter $c \leq m$
L1 Algorithm
Initially, $x = a_1$. When read $a_i$, let $x = a_i$ with probability $\frac{1}{i}$.
L0 Algorithm
k=2
- Initially, construct random hash $h:{1…n} \rightarrow {1…2}$.
- When read $a_i$: Store $a_i$ if $h(a_i)=1$.
- If store >1 number (among 1…n): Output TOO MUCH (fails)
- If no number stored: Output TOO LITTLE (fails)
- Otherwise, output the stored number.
这个 哈希函数(Hash Function) 是随机将 $N$ 个数分配成 1 或 2,因为 $k=2$,所以只会有四种情况。
假设两个数分别为 1,5,那么 4 种情况为:
- $1 \rightarrow 1, 5\rightarrow 1$
- $1 \rightarrow 1, 5\rightarrow 2$
- $1 \rightarrow 2, 5\rightarrow 1$
- $1 \rightarrow 2, 5\rightarrow 2$
其中,第 1 和第 4 种情况将会导致 FAIL,$Pr[FAIL]=\frac{1}{2}$。
在成功的 哈希函数 中,两个数被选中的概率是均等的。
Reduce Failure 降低失败率/提高成功率
通过构建不同的 hash function。例如:
- Initially, construct random hash $h_1,h_2,…,h_{10}:{1…n} \rightarrow {1…2}$.
- When read $a_i$: $\forall j$ store $a_i$ in set $x_j$ if $h_j(a_i)=1$.
- Say that $h_j$ fails if $x_j$ stores >1 number or no number
- Pick one $h_j$ not fail. Output $x_j$
- $Pr[all h_j fails]= \frac{1}{2^{10}}$
-
$\forall a_i: Pr[a_i \in x_j h_j not fail]=\frac{1}{2}$
通过构建 10 个不同的随机 哈希函数,来提高算法的成功率。
#待整理笔记
反向链接
到头儿啦~