Lec1
字符串 Binary String
字符集:
$$\Sigma=\{0,1\}$$
由字符集元素所构成的长度为 $n$ 的字符串集合:
$$\Sigma^n=\underbrace{\Sigma\times\Sigma\times...\times\Sigma}_{n\text{ times}}=\{a_1a_2...a_n:a_i\in\Sigma\}$$
特殊的集合表示:
$$\Sigma^0=\{e~\text{(empty string)}\}$$
$$\Sigma^*=\Sigma^0\cup\Sigma^1\cup...=\bigcup\limits_{n\geqslant 0}\Sigma^n$$
字符拼接:
设字符串 $x=a_1...a_n$,$y=b_1...b_m$,则它们的拼接为:
$$xy=a_1...a_n b_1...b_m$$
- $x$ 是 $y$ 的前缀(prefix) 当且仅当 $\exists z\in\Sigma^*,y=xz$
- $x$ 是 $y$ 的后缀(suffix) 当且仅当 $\exists z\in\Sigma^*,y=zx$
编码 Encoding
怎样将图、矩阵等编码成01字符串?
事实上,编码的本质是集合 $A$ 上的函数映射 $E$:
$$E:A\rightarrow\{0,1\}^*$$
$E$需要满足的条件是单射(one-to-one),即:
$$E(x)\neq E(x')\text{ if } x\neq x'$$
Example
自然数编码:
$$NtS(n)=\begin{cases} 0,n=0\\ 1,n=1\\ NtS(\lfloor\frac{n}{2}\rfloor)\text{parity}(n),n>1 \end{cases}$$
其中,parity 为奇偶校验,奇数为 1,偶数为 0。
自然数对编码:
前后两个数分别用自然数编码,中间用逗号隔开,然后重新编码:
$$\begin{cases} 0\rightarrow 00\\ 1\rightarrow 11\\ ,\rightarrow 01 \end{cases}$$
例如:$(1,6)\rightarrow 1,110\rightarrow 1101111100$
通过联想霍夫曼编码,我们可以知道,编码需要满足 prefix-free,即没有一个编码是另一个编码的前缀。
Lemma1
如果编码
$$E:A\rightarrow \{0,1\}^*$$
是 prefix-free 的,其中 $A$ 是一个字符集,则
$$\overline{E}:A^*\rightarrow\{0,1\}^*$$
是 one-to-one 的。
Proof
反证法:
假设存在
$$(a_1,a_2,...,a_{ka})\neq(b_1,b_2,...,b_{kb})\in A^*$$
但
$$\overline{E}(a_1,a_2,...,a_{ka})=\overline{E}(b_1,b_2,...,b_{kb})$$
依次比较 $a_1$ 和 $b_1$,$a_2$ 和 $b_2$,...,直到第一对不同的字符 $a_i\neq b_i$,若能找到,则
$$\overline{E}(a_1,a_2,...,a_{ka})=E(a_1)E(a_2)...E(a_{i-1})E(a_i)E(a_{i+1})...E(a_{ka})$$
$$\overline{E}(b_1,b_2,...,b_{kb})=E(b_1)E(b_2)...E(b_{i-1})E(b_i)E(b_{i+1})...E(b_{kb})$$
其中
$$E(a_1)E(a_2)...E(a_{i-1})=E(b_1)E(b_2)...E(b_{i-1})$$
因此有
$$E(a_i)E(a_{i+1})...E(a_{ka})=E(b_i)E(b_{i+1})...E(b_{kb})$$
从上式我们可以看出,$E(a_i)$ 和 $E(b_i)$ 的其中一个肯定是另一个的前缀。但由于 $a_i\neq b_i$ 且 $E$ 是 prefix-free 的,因此产生矛盾。
如果找不到 $i$,假设 $ka<kb$,则
$$E(b_{i+1})...E(b_{kb})=e$$
这同样不成立。
Lemma2
如果编码
$$E:A\rightarrow \{0,1\}^*$$
是 one-to-one 的,其中 $A$ 是一个字符集,则存在
$$E':A\rightarrow\{0,1\}^*$$
是 prefix-free 的,且有
$$|E'(a)|\leqslant 2|E(a)|+2 \text{ for }\forall a\in A$$
Proof
例如,$E(a)=010$
将老编码的每个 0 替换为 00,每个 1 替换为 11,最后加上 01 作为结尾。则有 $E'(a)=00110001$。
若 $a\neq b$,则 $E'(a)$ 不可能是 $E'(b)$ 的前缀,因为分别在奇数位和偶数位的 01 只能出现在末尾。也不可能相等,因为 $E$ 是 one-to-one 的。
不等式也不证自明。
Theorem1
将前两个引理结合起来,我们可以得到:
如果存在
$$E:A\rightarrow \{0,1\}^*$$
是 one-to-one 的,其中 $A$ 是一个字符集,则存在
$$E':A^*\rightarrow\{0,1\}^*$$
也是 one-to-one 的。
可数 Countable
- 集合 $A$ 可数
- $A$ 是有限集或存在双射 $f:A\rightarrow N$
- 存在单射 $g:A\rightarrow N$
- 存在满射 $h:N\rightarrow A$
这四个条件是等价的。
Lemma3
$\{0,1\}^*$ 是可数的。
Proof
利用第三条构造单射。
先对 $\{0,1\}^*$ 的元素排序,在集合角度上先按照 $\{0,1\}^0,\{0,1\}^1,\{0,1\}^2,...$ 排序,然后在每个子集中按照字典序排序。
我们可以构造出单射函数:
$$f(x)=\begin{cases} 0,x=e\\ 2^{|x|}+StN(|x|),|x|\geqslant 1 \end{cases}$$
Theorem2
集合 $A$ 可数当且仅当存在 one-to-one 的编码
$$E:A\rightarrow\{0,1\}^*$$
Proof
左推右:
因为 $A$ 可数,所以存在单射 $f:A\rightarrow N$。
又因为 lemma3 说 $\{0,1\}^$ 可数,因此存在双射 $g:N\rightarrow\{0,1\}^$。
结合这两个映射,便可得证。
右推左:
同样我们可以得知:存在双射 $g:{0,1}^*\rightarrow N$。
再结合右边的结论,便可得到 $A$ 到 $N$ 也有一个单射,因此 $A$ 可数,得证。
问题 Problem
problem 是否可数?No!
Proof
problem 实质就是函数。考虑某个特殊的函数集合 $\{f:f:N\rightarrow\{0,1\}\}$,通过反证法证明这个集合不可数。
若可数,则进行排序:$f_1,f_2,f_3,...$
构造函数$g$,满足
$$g(i)=\begin{cases} 0,f_i(i)=1\\ 1,f_i(i)=0 \end{cases}$$
此时,$g$不等于任何一个$f_i$,但$g$依然属于这个函数集合,因此产生矛盾。
Note
$\{f:f:\{0,1\}^*\rightarrow\{0,1\}\}$ 和 $\{f:f:\{0,1\}^*\rightarrow\{0,1\}^*\}$ 均不可数。