# 作业四

# 习题 4.2

  • 因为只使用一个哈希函数,同一哈希函数,输入值相同,则哈希值也一定相同,故被分为 k 组时,每组实际都为平行且独立互不干扰,因此只关注一组内的情况即可

假设哈希函数的选择是完全随机的

此时误判率为插入mm 个元素后,某元素被判断为在集合内,实际不在集合内的概率

nn 位内存分为kk 组,每组nk\frac n k​位

那么,任意一次哈希函数选中这一位的概率为

kn\frac k n

因此没有选择这一位的概率为

1kn1-\frac k n

mm 个元素被同一哈希函数哈希到数组内后,设XiX_i 为数组第ii 位的值

P(Xi=0)=(1kn)mekmnP(X_i =0)=(1- \frac k n)^m \approx e^{- \frac {km} n}

由此可知,插入mm 个元素后,某一位被置为 1 的概率为

P(Xi=1)=1P(Xi=0)1ekmnP(X_i = 1)=1-P(X_i=0)\approx 1-e^{- \frac {km} n}

因为只有一个哈希函数,因此该位恰好被置为 1 就会发生误判,那么误判率为

f=1ekmnf = 1-e^{- \frac {km} n}

  • 区别:使用单个哈希函数和使用多个哈希函数相比,可能会导致更高的误判率,并且分 k 组实际上减小了空间利用率,因为每组内的情况是完全平行的

# 习题 4.3

分析内存

4GB=41024KB=410241024B4GB/64B=655364 GB=4*1024KB=4*1024*1024B\\ 4GB/64B=65536

显然远小于我们需要分析的数据量,因此需要进行分治

  1. 划分小文件

5Billion64B=305Kilo GB305Kilo GB / 1000=305MB5Billion*64B=305Kilo\ GB \\ 305Kilo\ GB\ / \ 1000= 305MB

  • 首先,遍历文件 a,对遍历到的 URL 计算哈希值 hash(URL) % 1000
  • 根据计算结果,将遍历到的 URL 存储到 a0, a1, a2, …, a999 这 1000 个小文件中,每个小文件大小约为 305MB
  • 使用相同的方法遍历文件 b,将文件 b 中的 URL 分别存储到 b0, b1, b2, …, b999 这 1000 个小文件中。
  1. 查找共同的 URL
  • 所有可能相同的 URL 都在对应的小文件中,即 a0 对应 b0, a1 对应 b1, …, a999 对应 b999。
  • 我们只需求出这 1000 对小文件中相同的 URL。
  • 遍历每个小文件 ai (i ∈ [0, 999]) 中的所有 URL,将 URL 存储到一个 HashSet 集合中。
  • 然后遍历文件 bi 中的每个 URL,检查是否在 HashSet 集合中存在。若存在,说明这是共同的 URL,可以将其保存到一个单独的文件中。

# 习题 4.4

令集合分别为 A B C

A={1,2,3,4}B={2,3,5,7}C={2,4,6}A = \{1,2,3,4\} \\ B = \{2,3,5,7\}\\ C = \{2,4,6\}

Jaccard(A,B)=26=13Jaccard(A,C)=25Jaccard(B,C)=16Jaccard(A,B)=\frac 2 6 =\frac 1 3\\ Jaccard(A,C)=\frac 2 5\\ Jaccard(B,C)=\frac 1 6

# 习题 4.7

假设有两个集合 A 和 B,且它们的 Jaccard 相似度为 0,即 J(A,B)=0J(A, B) = 0。证明 Min-Hashing 可以给出正确的估计。

证明

  • 由于 J(A,B)=0J(A, B) = 0,说明 A 和 B 没有共同的元素,即 AB=A \cap B = \emptyset

  • 对于任意一个哈希函数,它在 A 和 B 中的元素都不相同,则集合 A B 所构成的特征矩阵,没有两行值均为 1 的情况,只有两行值有且仅有一个值为 1, 或者全为 0 的情况

    行号AB
    001
    110
    \cdots\cdots\cdots
    n00
  • 故集合 A B 的最小哈希值一定不同,因此 Min-Hash 签名的每一列都不同。

  • 由于 Min-Hash 签名的每一列都不同,它们的相似度为 1,即 JMin-Hash(A,B)=1J_{\text{Min-Hash}}(A, B) = 1

  • 因此,Min-Hashing 正确地估计了 A 和 B 的相似度。

# 习题 4.8

显然:

  • JS^(S1,S2)\widehat {JS}(S_1,S_2) 表示通过随机排列hih_i 计算的JaccardJaccard 相似度的估计值
  • JS(S1,S2)JS(S_1,S_2) 表示S1S_1S2S_2 的真实JaccardJaccard​相似度
  1. HoeffdingHoeffding​不等式:

    • 对于独立同分布的随机变量X1,X2,...,XkX_1,X_2,...,X_k,满足0Xi10 \leq X_i \leq 1, 以及E[Xi]=pE[X_i]=p,有

      P(1ki=1kXip>ϵ)2e2kϵ2P(|\frac 1 k \sum\limits_{i=1}^k X_i-p|>\epsilon)\leq 2e^{-2k\epsilon^2}

    • 需要估计JS^(S1,S2)JS(S1,S2)|\widehat {JS}(S_1,S_2) - JS(S_1,S_2)|, 令p=JS(S1,S2)p = JS(S_1,S_2), 则E[Xi]=pE[X_i] = p

    • 根据HoeffdingHoeffding 不等式,有:

      P(JS^(S1,S2)JS(S1,S2)>ϵ)2e2kϵ2P(|\widehat {JS}(S_1,S_2) - JS(S_1,S_2)| > \epsilon) \leq 2e^{-2k\epsilon^2}

  2. 选择kk 的条件

    • 需要证明

      P(JS^(S1,S2)JS(S1,S2)>ϵJS(S1,S2))<δP(|\widehat {JS}(S_1,S_2) - JS(S_1,S_2)| > \epsilon JS(S_1,S_2)) < \delta

    • 因此,有2e2kϵ2<δ2e^{-2k\epsilon^2} < \delta

    • 解得:k>ln(1/δ)2ϵ2k> \frac {ln(1/ \delta)}{2 \epsilon^2}

    • 因此,当k=O(ln(1/δ)ϵ2)k = O(\frac {ln(1/ \delta)}{\epsilon^2}) 时,上述概率小于δ\delta

# 习题 4.9

(1)

Jaccard(S1,S2)=14Jaccard(S1,S3)=14Jaccard(S2,S3)=0Jaccard(S_1,S_2)=\frac 1 4\\ Jaccard(S_1,S_3)=\frac 1 4\\ Jaccard(S_2,S_3)=0

(2)

行号S1S_1S2S_2S3S_3h1(x)h_1(x)h2(x)h_2(x)h3(x)h_3(x)
0110122
1010211
2100300
3001455
4101544
5000033

mh1(S1)=1,mh1(S2)=1,mh1(S3)=4mh2(S1)=0,mh2(S2)=1,mh2(S3)=4mh3(S1)=0,mh3(S2)=1,mh3(S3)=4mh_1(S_1)=1,mh_1(S_2)=1,mh_1(S_3)=4\\ mh_2(S_1)=0,mh_2(S_2)=1,mh_2(S_3)=4\\ mh_3(S_1)=0,mh_3(S_2)=1,mh_3(S_3)=4

# 习题 4.11

  • 假定将某个最小哈希签名矩阵划分为bb 组,每组为rr 行,并且假定两个集合的JaccardJaccard 相似度为ss

  • 由定理 4.1 可知,两个集合最小哈希值相等的概率为ss

  1. 在某个具体的组中,这对集合所有的最小哈希值都相等的概率是srs^r

  2. 在某个具体的组中,这对集合至少有一个位置的最小哈希值不相等的概率是1sr1 - s^r,即没有被映射到同一个桶

  3. 在任何一个组中,这对集合都没有被映射到同一个桶中的概率是(1sr)b(1-s^r)^b

  4. 在整个最小哈希签名矩阵中,至少在一个组中两个集合被映射到同一个桶概率为1(1sr)b1-(1-s^r)^b

    因此当1(1sr)b=121-(1-s^r)^b=\frac 1 2 时,解得s=(1(12)1b)1r(1b)1rs= (1-(\frac 1 2)^{\frac 1 b})^{\frac 1 r} \approx (\frac 1 b)^{\frac 1 r}

    即,

t=(1(12)1b)1r(1b)1rt= (1-(\frac 1 2)^{\frac 1 b})^{\frac 1 r} \approx (\frac 1 b)^{\frac 1 r}