跳到主要内容

重码估计方法

问题​

设有 nn 个待编码对象,构成的集合为 SS。

S={s1,⋯ ,sn}S=\{s_1,\cdots,s_n\}

现对其编码,允许使用的编码空间为集合 C={c1,⋯ ,ck}C=\{c_1,\cdots,c_k\}, 大小为 kk,估计重码的数量。

独立随机编码近似​

假设每个对象的编码是随机且独立的,则在编码每个对象时,某码 cc 可能被使用的概率是 1/k1/k。在对集合 SS 中的每个字编码时,相当于重复执行 nn 次概率为 1/k1/k 的试验,最终 cc 被使用的次数 XX 满足 B(n,1/k)B(n,1/k) 的二项分布,即

P(X=x)=(nx)(1k)x(1−1k)n−x\mathbb P(X=x)=\binom{n}{x}\left(\frac1k\right)^{x}\left(1-\frac1k\right)^{n-x}

若 X=0X=0 或 X=1X=1,则 cc 上不发生重码。若 X≥2X\ge 2,则 cc 上发生重码,需要选重的数量为 X−1X-1. 因此,在这个编码上产生的选重数为 Y=max⁡(X−1,0)Y=\max (X-1,0)

E(Y)=∑x=0+∞P(X=x)max⁡(X−1,0)=∑x=1+∞P(X=x)(X−1)=P(X=0)+∑x=0+∞P(X=x)(X−1)=P(X=0)+E(X−1)=P(X=0)+n/k−1\begin{aligned} \mathbb E(Y)&=\sum_{x=0}^{+\infty}\mathbb P(X=x)\max(X-1,0)\\ &=\sum_{x=1}^{+\infty}\mathbb P(X=x)(X-1)\\ &=\mathbb P(X=0)+\sum_{x=0}^{+\infty}\mathbb P(X=x)(X-1)\\ &=\mathbb P(X=0)+\mathbb E(X-1)\\ &=\mathbb P(X=0)+n/k-1 \end{aligned}

这意味着我们只需要计算 P(X=0)\mathbb P(X=0) 即可。根据二项式展开:

P(X=0)=(1−1k)n=1−nk+n(n−1)2k2−n(n−1)(n−2)6k3+⋯\mathbb P(X=0)=\left(1-\frac1k\right)^n=1-\frac nk+\frac{n(n-1)}{2k^2}-\frac{n(n-1)(n-2)}{6k^3}+\cdots

注意到,前两项恰和 n/k−1n/k-1 抵消,因此在 1≪n≪k1\ll n\ll k 的情况下我们只需要取第三项即可,若要更精确,可取第四项。

E(Y)≈n(n−1)2k2−n(n−1)(n−2)6k3≈n22k2(1−n3k)\mathbb E(Y)\approx \frac{n(n-1)}{2k^2}-\frac{n(n-1)(n-2)}{6k^3}\approx\frac{n^2}{2k^2}\left(1-\frac{n}{3k}\right)

而发生重码的总数是全部编码上产生的选重数之和,因此需要乘以 kk,即 n2/2kn^2/2k。

另外,如果统计的标准不是选重数,而是涉及的重码总数,则可以表示为 Z=X×I(X≥2)Z=X\times \mathbb I(X\ge 2) 的期望,

E(Z)=∑x=2+∞P(X=x)X=E(X)−P(X=1)\mathbb E(Z)=\sum_{x=2}^{+\infty}\mathbb P(X=x)X=\mathbb E(X)-\mathbb P(X=1) P(X=1)=nk(1−1k)n−1=nk(1−n−1k+⋯ )\mathbb P(X=1)=\frac nk\left(1-\frac1k\right)^{n-1}=\frac nk\left(1-\frac {n-1}k+\cdots\right)

因此

E(Z)≈n2k2\mathbb E(Z)\approx\frac{n^2}{k^2}