离散数学——基本离散结构:集合,函数,序列,和式和矩阵

集合

集合介绍

本章,我们将学习所有离散结构的基础,集合。集合被用来组织对象。这些对象通常有相同的属性。我们先给出一些感性的定义。

定义:一个集合是一个无序容器,叫做元素或对象的集合。一个集合被说成包含它的元素。我们写法 a∈Aa \in AaA 指的是元素 aaa 在集合 AAA 中。我们用记号 a∉Aa \notin Aa/A 称作元素 aaa 不在集合 AAA 中。

我们通常约定大写字母表示集合,小写字母表示元素。

表示集合有很多方法,经常使用的是 列举法 ,即将集合中的元素用花括号列出来,例如 A={a,b,c,d}A=\{ a,b,c,d \}A={a,b,c,d} 即集合 AAA 中含有四个元素,分别是 a,b,c,da,b,c,da,b,c,d

有时候元素的数量可能很多,但是元素有一定的模式,此时我们就能用 …\ldots 来表示省略,例如 A={1,2,…,99,100}A = \{1,2,\ldots,99,100\}A={1,2,,99,100} 来表示 111100100100 的整数。

另外一种描述集合的方法称为 集合构造器 记号。我们描述集合元素的特征而不是列举元素。例如 O={x∈Z+∣x≤10}O = \{x \in Z^+|x \leq 10\}O={xZ+x10} 表示集合 OOO 中包含小于等于 101010 的正整数。

下面的这些集合是数学中经常使用的集合。通常用黑体或者空心花体表示。

名称 解释
N\mathbb{N}N 自然数集合(此书包含 000
Z\mathbb{Z}Z 整数集合
Z+\mathbb{Z^+}Z+ 正整数集合
QQQ 有理数集合
Q+Q^+Q+ 正有理数集合
RRR 实数集合
R+R^+R+ 正实数集合
CCC 复数集合

回想一下我们区间记号的写法:

[a,b]={x∣a≤x≤b}[a,b)={x∣a≤x<b}(a,b]={x∣a<x≤b}(a,b)={x∣a<x<b} \begin{aligned} \left [a,b \right ] & = \{x|a \leq x \leq b\} \\ [a,b) & = \{x|a \leq x \lt b\} \\ (a,b] & = \{x|a \lt x \leq b\} \\ (a,b) & = \{x|a \lt x \lt b\} \end{aligned} [a,b][a,b)(a,b](a,b)={xaxb}={xax<b}={xa<xb}={xa<x<b}

第一个被称为 闭区间 ,最后一个称为 开区间

注意数据类型或者类型的概念,在计算机科学中是基于集合的概念。也就是说,一个 数据类型 是一个集合,具有相同的操作在集合中。例如布尔类型就是 ${0,1}$ 具有两个元素的集合,集合中的元素可以进行与或非等操作。

定义:如果两个集合是是相同的,当且仅当他们有相同的元素。因此,如果 AAABBB 是相同的,当且仅当 ∀x(x∈A  ⟺  x∈B)\forall x (x \in A \iff x \in B)x(xAxB) 。我们写成 A=BA = BA=B

有一个特殊的集合没有任何元素,被称为 空集 写作 ∅\emptyset 。用列举法表示为 {}\{\}{}

另外一个特殊的集合是 单集 ,这个集合的元素有且只有一个。

一个常见的困惑是 ∅\emptyset{∅}\{ \emptyset \}{} 的区别,我们发现,前者指的是空集,没有任何元素,后者是一个单集,有一个元素为空集。这就类比于计算机中的文件目录结构。

韦恩图

一些集合能够形象化的表示为韦恩图。在韦恩图中 全集 是指包含一切元素的集合(取决于你的研究对象),记作 UUU ,在韦恩图中用一个矩形表示。在矩形中,其他的几何元素例如圆表示一个集合,用点来表示一个具体的元素,用重叠关系来表示集合关系。

子集

定义:集合 AAA 是集合 BBB 的子集如果集合 AAA 中所有的元素也在 BBB 中。我们使用记号 A⊆BA \subseteq BAB 表示。

我们发现 A⊆BA \subseteq BAB 等价于:

∀x(x∈A→x∈B) \forall x (x \in A \to x \in B) x(xAxB)

韦恩图表示为 BBB 包含 AAA

定理:对于任何集合 SSS∅⊆S\emptyset \subseteq SS 并且 S⊆SS \subseteq SSS

这说明一个非空集合必有两个子集,一个是空子集,一个是他本身,这两个集合称为平凡子集。

当我们想强调 AAABBB 的一个子集但是 A≠BA \neq BA=B ,此时我们用记号 A⊂BA \subset BAB 说明 AAABBB 的一个 真子集 。等价于下面的命题:

∀x(x∈A→x∈B)∧∃x(x∈B∧x∉A) \forall x (x \in A \to x \in B) \wedge \exists x (x \in B \wedge x \notin A) x(xAxB)x(xBx/A)

如果我们想证明 A=BA = BA=B 我们可以证明 A⊆BA \subseteq BAB 并且 B⊆AB \subseteq ABA

集合的大小

定义:如果集合 SSSnnn 个不同的元素,这里 nnn 是一个非负整数。我们说集合 SSS 是有限集合并且 nnn 是集合的势。集合的势被记作 ∣S∣|S|S

另外,集合分为有限集合和无限集合。

定义:如果一个集合不是有限集合,那么他是无限集合。

幂集

许多集合问题都和它的子集有关,我们定义幂集这个概念。

定义:给定一个集合 SSSSSS 的幂集是他所有子集的集合,记作 P(x)\mathcal{P}(x)P(x)

如果一个集合 SSSnnn 个元素,那么他的子集有 2n2^n2n 个,它幂集的势为 2n2^n2n

笛卡尔积

集合有的时候并不是我们想要的结构,因为他是无序的。有时候我们需要一个有序的结构,称为 nnn 元组

定义:有序 nnn 元组 (a1,a2,…,an)(a_1,a_2,\ldots,a_n)(a1,a2,,an) 是一个有序集合, a1a_1a1 作为第一个元素,以此类推。

我们说两个 nnn 元组相等,当且仅当对应位置上的元素均相同。

特别的, 222 元组被称为 有序对

定义:让 AAABBB 是集合,两个集合的笛卡尔积 A×BA \times BA×B 是一个所有元素都是有序对的集合:

A×B={(a,b)∣a∈A∧b∈B}A \times B = \{(a,b)|a \in A \wedge b \in B\}A×B={(a,b)aAbB}

我们将定义推广至 nnn 个集合的笛卡尔积。

定义:多个集合的笛卡尔积 A1×A2×…×AnA_1 \times A_2 \times \ldots \times A_nA1×A2××An 是一个所有元素都是有序对的集合:

A1×A2×…×An={(a1,a2,…,an)∣a1∈A1∧a2∈A2∧…∧an∈An}A_1 \times A_2 \times \ldots \times A_n = \{(a_1,a_2,\ldots,a_n)|a_1 \in A_1 \wedge a_2 \in A_2 \wedge \ldots \wedge a_n \in A_n\}A1×A2××An={(a1,a2,,an)a1A1a2A2anAn}

我们使用记号 A2A^2A2 表示运算 A×AA \times AA×A ,同理 AnA^nAnnnnAAA 的笛卡尔积。

一个 A×BA \times BA×B 的子集 RRR 被称为是从 AAABBB关系

使用集合记号和量词

有了集合,我们就可以引入集合限定域,例如 ∀x∈S(P(x))\forall x \in S (P(x))xS(P(x)) 就是 ∀x(x∈S→P(x))\forall x (x \in S \to P(x))x(xSP(x)) 的简写。

对于特称量词也同理。

真值集合和量词

我们将集合和量词的关系连接起来。定义谓词 P(x)P(x)P(x)真值集合 {x∈D∣P(x)}\{x \in D | P(x)\}{xDP(x)} 指的是所有在全域 DDD 上使得 P(x)P(x)P(x) 为真的所有元素构成的集合。

集合操作

集合操作介绍

对于两或多个集合,可以根据他们拥有元素的特征进行集合的运算。

定义:集合 AAABBB 的并集,记作 A∪BA \cup BAB ,是那些在 AAABBB 或者在两者中的所有元素构成的集合。

集合的并集等价于:

A∪B={x∣x∈A∨x∈B} A \cup B = \{x | x \in A \vee x \in B\} AB={xxAxB}

用韦恩图表示为两者所有的面积。

定义:集合 AAABBB 的交集,记作 A∩BA \cap BAB ,是那些既在 AAA 又在 BBB 中的所有元素构成的集合。

集合的并集等价于:

A∩B={x∣x∈A∧x∈B} A \cap B = \{x | x \in A \wedge x \in B\} AB={xxAxB}

用韦恩图表示为两者重叠部分的面积。

定义:两个集合是不交的,当且仅当两个集合的交集为空集。

我们有时对两个集合并集的集合的势的大小感兴趣,注意 ∣A∣+∣B∣|A| + |B|A+B 将重叠部分的面积计算了两次,所有我们还有减去一次重叠面积,也就是:

∣A∪B∣=∣A∣+∣B∣−∣A∩B∣ |A \cup B| = |A| + |B| - |A \cap B| AB=A+BAB

上面的计算方法被称为 容斥原理

定义:两个集合的差集 A−BA - BAB 是那些在 AAA 中 但不在 BBB 中所有元素构成的集合。也叫 AAA 的补相对于 BBB

A−B={x∣xinA∧x∉B} A - B = \{x | x in A \wedge x \notin B\} AB={xxinAx/B}

用韦恩图表示为用 AAA 的面积减去 BBB 的面积。

一旦全集 UUU 确定,那么我们即可以定义集合 SSS 的补集。

定义:集合 AAA 的补集,记作 Aˉ\bar{A}AˉU−AU - AUA

也就是说:

Aˉ={x∈U∣x∉A} \bar{A} = \{x \in U | x \notin A\} Aˉ={xUx/A}

关于补集有个重要的恒等式:

A−B=A∩Bˉ A - B = A \cap \bar{B} AB=ABˉ

集合恒等式

下面表展示了大部分的集合恒等式。

恒等式 名称
A∩U=AA \cap U = AAU=A 同一律
A∪∅=AA \cup \emptyset = AA=A 同一律
A∪U=UA \cup U = UAU=U 零律
A∩∅=∅A \cap \emptyset = \emptysetA= 零律
A∪A=AA \cup A = AAA=A 幂等律
A∩A=AA \cap A = AAA=A 幂等律
Aˉˉ=A\bar{\bar{A}} = AAˉˉ=A 双重否定律
A∪(B∪C)=(A∪B)∪CA \cup (B \cup C) = (A \cup B) \cup CA(BC)=(AB)C 结合律
A∩(B∩C)=(A∩B)∩CA \cap (B \cap C) = (A \cap B) \cap CA(BC)=(AB)C 结合律
A∪(B∩C)=(A∪B)∩(A∪C)A \cup (B \cap C) = (A \cup B) \cap (A \cup C)A(BC)=(AB)(AC) 分配律
A∩(B∪C)=(A∩B)∪(A∩C)A \cap (B \cup C) = (A \cap B) \cup (A \cap C)A(BC)=(AB)(AC) 分配律
A∩B‾=Aˉ∪Bˉ\overline{A \cap B} = \bar{A} \cup \bar{B}AB=AˉBˉ 德摩根律
A∪B‾=Aˉ∩Bˉ\overline{A \cup B} = \bar{A} \cap \bar{B}AB=AˉBˉ 德摩根律
A∪(A∩B)=AA \cup (A \cap B) = AA(AB)=A 吸收律
A∩(A∪B)=AA \cap (A \cup B) = AA(AB)=A 吸收律
A∪Aˉ=UA \cup \bar{A} = UAAˉ=U 互补律
A∩Aˉ=∅A \cap \bar{A} = \emptysetAAˉ= 互补律

一些恒等式除了使用命题证明外,还可以使用 关系表 证明,关系表是类似于真值表的一个表,用 000 表示元素不在集合中,用 111 表示在集合中。

广义并和交

定义:一些集合的并集定义为元素至少在一个集合中。

也就是说:

A1∪A2∪…∪An=⋃i=1nAi A_1 \cup A_2 \cup \ldots \cup A_n = \bigcup_{i=1}^n A_i A1A2An=i=1nAi

定义:一些集合的交集定义为元素在所有集合中。

也就是说:

A1∩A2∩…∩An=⋂i=1nAi A_1 \cap A_2 \cap \ldots \cap A_n = \bigcap_{i=1}^n A_i A1A2An=i=1nAi

集合在计算机中的表示

有很多方式可以在计算机中表示集合。假设全集是有限的,我们可以用一串二进制数来表示一个集合,例如第一位表示元素 a1a_1a1 在不在集合中。

此时集合的交并补,正好对应二进制运算的 ANDORNOT

函数

函数介绍

定义:让 AAABBB 是两个非空子集。一个函数 fff 是给一个确定的 BBB 中元素给每一个 AAA 中的元素。我们写作 f(a)=bf(a) = bf(a)=b 这说明我们将 bbb 对应给 aaa 元素。这样的函数写作 f:A→Bf: A \to Bf:AB

注意,函数有时也叫 映射 或者是 变换

描述函数的方式有很多种,一般数学上描述函数给出函数的公式,例如 f(x)=x+1f(x) = x+1f(x)=x+1 ,函数也可看做是从 AAABBB 的关系的一种子集。如果存在 f(a)=bf(a) = bf(a)=b 那么一定存在 (a,b)(a,b)(a,b)

定义:如果函数 f:A→Bf:A \to Bf:AB 那么我们称 AAA 是函数的域, BBB 是函数的陪域。如果 f(a)=bf(a) = bf(a)=b 我们称 bbbaaa 的像,而 bbb 是原像。函数 fff 的像或是值域指的是所有 AAA 中元素的像的集合。同时,我们也说是 fffAAABBB 的映射。

注意,两个函数相等当且仅当两个函数的域,陪域以及映射关系相同。当我们改变任意一个要素,我们得到是两个不同的函数。

一个函数称为 实值的 如果它的陪域是实数的集合,如果是 整值的 如果它的陪域是整数的集合,两个实值或是整值函数可以相加或者相乘。

定义:让 f1f_1f1f2f_2f2 是两个 A→RA \to RAR 的函数。此时 f1+f2f_1 + f_2f1+f2f1f2f_1f_2f1f2 仍是 A→RA \to RAR 的函数,分别为 (f1+f2)(x)=f1(x)+f2(x)(f_1 + f_2)(x) = f_1(x) + f_2(x)(f1+f2)(x)=f1(x)+f2(x)(f1f2)(x)=f1(x)f2(x)(f_1f_2)(x) = f_1(x) f_2(x)(f1f2)(x)=f1(x)f2(x)

如果函数 f:A→Bf: A \to Bf:AB 那么 AAA 子集的像也就能定义。

定义:如果 fff 是从 AAABBB 的函数,让 SSS 是集合 AAA 的子集。子集 SSSfff 下的像是一个 BBB 的子集,包含每一 SSS 中元素的像,记作 f(S)f(S)f(S) ,所以:

f(S)={t∣∃s∈S(t=f(s))}f(S) = \{t | \exists s \in S (t = f(s))\}f(S)={tsS(t=f(s))}

有时简记为 {f(s)∣s∈S}\{f(s) | s \in S\}{f(s)sS}

注意,写法 f(S)f(S)f(S) 是具有歧义的,可能是集合的像,也可能是集合的映射,出现歧义时要具体说明。

一对一和满射函数

有时我们不会给两个不同域元素分配同样的值,这叫做 一对一函数

定义:如果函数是一对一函数或者是单射函数,当且仅当对于所有的 f(a)=f(b)f(a) = f(b)f(a)=f(b) 都有 a=ba = ba=b

我们给出单射函数的一些条件。

定义:一个域和陪域都是实数集合的函数 fff 是单调递增的,当且仅当对于所有x<yx \lt yx<y 都有 f(x)≤f(y)f(x) \leq f(y)f(x)f(y) ,是严格单调递增的如果 f(x)<f(y)f(x) \lt f(y)f(x)<f(y) 。单调递减也同理。

显然,一个严格单调递增函数或严格单调递减函数都是一个一对一函数。

有时,一个函数的陪域和值域相同,此时我们称这个函数是 满射函数

定义:如果一个函数是满射函数,当且仅当对于陪域中的任意一个元素 bbb 都能在域中找到元素 aaa 使得 f(a)=bf(a) = bf(a)=b

如果函数同时具有单射和满射的性质,我们称这个函数是一个 双射函数

定义:如果函数同时具有单射和满射的性质,我们称这个函数是一个双射函数,也称为是一一对应函数。

反函数和复合函数

考虑一个一一对应函数,这个函数是满射的因此所有陪域中的元素都能找到一个原像对应,又因为是单射函数,所以原像是唯一的,那么反过来的关系也一定是函数。

定义: fff 是一个一一对应函数,如果存在 f(a)=bf(a) = bf(a)=b 那它的反函数就存在 f−1(b)=af^{-1}(b) = af1(b)=a

注意写法 f−1f^{-1}f1 并不是指倒数。

有时也称反函数为 可逆 函数。

定义:函数 gggAAABBB 的函数,函数 fffBBBCCC 的函数,这两个函数的复合函数记作 (f∘g)(a)=f(g(a))(f \circ g)(a) = f(g(a))(fg)(a)=f(g(a))

也就是说,复合函数相当于是作用两次的函数,此时 ggg 的值域必须是 fff 域的子集。

如果函数 fff 存在反函数,那么 (f−1∘f)(a)=ιA(a)=a(f^{-1} \circ f)(a) = \iota_A(a) = a(f1f)(a)=ιA(a)=a 并且 (f∘f−1)(b)=ιB(b)=b(f \circ f^{-1})(b) = \iota_B(b) = b(ff1)(b)=ιB(b)=b

函数的图

我们可以用 A×BA \times BA×B 的子集来描述任何从 AAABBB 的函数。

定义:让 fff 是从 AAABBB 的函数。函数 fff 的图是有序对集合 {(a,b)∣a∈A∧f(a)=b}\{(a,b) | a \in A \wedge f(a) = b\}{(a,b)aAf(a)=b}

一些重要的函数

定义:底函数 ⌊x⌋\lfloor x \rfloorx 是不大于 xxx 的最大整数,顶函数 ⌈x⌉\lceil x \rceilx 是不小于 xxx 的最小整数。

另外一个重要的函数是 阶乘函数

这些在具体数学中会具体讲解,因此不在赘述。

部分函数

定义:如果函数 fff 只在域 AAA 的子集下有定义,这个子集叫做定义域,此时函数被称为部分函数,如果定义域等于域,那么称为全函数。

部分函数的定义是为了更好的描述一些特殊函数的反函数,例如 x\sqrt{x}x 就是一个部分函数。因为在负整数部分没有定义。

序列和和式

序列和和式的介绍

序列是一些元素的有序列表,在一些离散问题上具有重要的作用,通常用于计数,而计数的基础是和式的计算,因此本章讲解序列和和式。

序列

序列是一些元素的有序列表,例如 1,3,5,7,91,3,5,7,91,3,5,7,9 是一个有限序列,而 1,3,9,…,3n1,3,9,\ldots,3^n1,3,9,,3n 则是一个无限序列。

定义:一个序列是一个域为整数(通常是 {0,1,2,3,…}\{0,1,2,3,\ldots\}{0,1,2,3,} 或者是 {1,2,3,…}\{1,2,3,\ldots\}{1,2,3,} )的函数,我们记作 ana_nannnn 的像。我们将一系列的 ana_nan 叫做是序列。

我们用 {an}\{a_n\}{an} 这个序列来记作一个序列。

有限序列有时也称为是 ,串的长度是有限序列的长度,空串记为 λ\lambdaλ

递归关系

定义:用 ana_nan 的前项( {a1,a2,…,an−1}\{a_1,a_2,\ldots,a_{n-1}\}{a1,a2,,an1} )描述 ana_nan 的方式称为递归描述。一个序列称为解,如果这个序列满足这个递归描述。

初始条件 指的是能开始递归的极小前几项,也就是说,确定了初始条件,那么就唯一的确定了其一个解。

如果我们找到了一个具有初始条件的迭代公式,我们称这个公式是其递归描述的一个 封闭公式

进一步展开将在具体数学系列笔记中说明,此处不在赘述。

如果想查询一个序列,可以访问 OEIS (On-Line
Encyclopedia of Integer Sequences) 数据库。

和式

接下来,我们讨论序列的和式,我们引入 和式记号 ,假设我们有序列:

am,am+1,…,an a_m,a_{m+1},\ldots,a_n am,am+1,,an

将这些序列元素相加,我们记为:

∑j=mnaj=am+am+1+…+an \sum_{j=m}^n a_j = a_m + a_{m+1} + \ldots + a_n j=mnaj=am+am+1++an

这里, jjj 称为 和式索引 通常使用字母 i,j,ki,j,ki,j,k 来表示。 mmm 称为和式的 下限 nnn 称为和式的 上限

定理:如果 aaarrr 都是实数且 rrr 不等于 000 ,那么:

∑j=0narj=arn+1−ar−1\sum_{j=0}^n ar^j = \frac{ar^{n+1} - a}{r - 1}j=0narj=r1arn+1a 如果 r≠1r \neq 1r=1

∑j=0narj=(n+1)a\sum_{j=0}^n ar^j = (n+1)aj=0narj=(n+1)a 如果 r=1r = 1r=1

和式也是可以嵌套的,例如:

∑i=14∑j=13ij \sum_{i=1}^4 \sum_{j = 1}^3 ij i=14j=13ij

处理嵌套和式我们从内部到外部处理,遇见外部变量当做为常量。

对于集合和式:

∑s∈Sf(s) \sum_{s \in S} f(s) sSf(s)

的意思是对所有 f(s)f(s)f(s) 求和,其中 sss 是集合 SSS 中的所有元素。

无限和式也称为 级数 ,处理级数可能需要一些微积分的知识。

进一步展开将在具体数学系列笔记中说明,此处不在赘述。

下面给出常用的和式表:

和式 封闭形式
∑k=0nark(r≠0)\sum_{k=0}^n ar^k (r \neq 0)k=0nark(r=0) arn+1−ar−1\frac{ar^{n+1} - a}{r - 1}r1arn+1a
∑k=1nk\sum_{k=1}^n kk=1nk n(n+1)2\frac{n(n+1)}{2}2n(n+1)
∑k=1nk2\sum_{k=1}^n k^2k=1nk2 n(n+1)(2n+1)6\frac{n(n+1)(2n+1)}{6}6n(n+1)(2n+1)
∑k=1nk3\sum_{k=1}^n k^3k=1nk3 n2(n+1)24\frac{n^2(n+1)^2}{4}4n2(n+1)2
∑k=0∞xk,abs(x)<1\sum_{k=0}^\infty x^k,abs(x) \lt 1k=0xk,abs(x)<1 11−x\frac{1}{1 - x}1x1
∑k=1∞kxk−1,abs(x)<1\sum_{k=1}^\infty kx^{k-1},abs(x) \lt 1k=1kxk1,abs(x)<1 1(1−x)2\frac{1}{(1 - x)^2}(1x)21

集合的势

在上一章我们介绍了有限集合的势就是集合元素的个数,本章介绍无限集合的势,以及等势,比较两个无限集合势大小的方法。

定义:如果两个集合 AAABBB 是等势的,当且仅当存在一个从 AAABBB (或从 BBBAAA )的双射函数。我们说这两个集合是等势的,记作 ∣A∣=∣B∣|A| = |B|A=B

对于集合势的定义,我们并不是直接测量集合的大小,而是通过相对的方法比较两个集合的势的大小关系。同理,集合势的大小也存在大小关系。

定义:如果存在从 AAABBB 的单射函数,我们说 AAA 的势小于等于 BBB ,写作 ∣A∣≤∣B∣|A| \leq |B|AB 。进一步,如果 AAABBB 不等势,那么我们说 AAA 的势小于 BBB ,写作 ∣A∣<∣B∣|A| \lt |B|A<B

可数集合

我们将无限集合分成两类,一类和自然数集等势,另一类不等势。

定义:如果集合是有限的或者无限的但和正整数集合等势,那么这个集合叫做可数集合,否则叫做不可数集合。我们将可数集合的势记作 ℵ0\aleph_00 (读作阿列夫零),同时记作 ∣A∣=ℵ0|A| = \aleph_0A=0

可数集合一个重要的特征是能够列举成序列的形式,因为序列的索引和正整数集是一一对应的。

根据可数集的定义,我们显然知道,整数集是可数集,但更重要的是,有理数集同样是可数集。

有理数可以写作是 p/qp/qp/q 的形式,那么我们让 ppp 作为列标,而 qqq 作为行标,这样就有了一个无限大的方格,我们以斜对角线的方式遍历这个无限大的方格,得到一个无限序列,因此有理数集同样是可数集。

不可数集

我们已经知道了可数集的定义和例子,对于不可数集的讨论,实数集就是经典是不可数集合。我们使用著名的 康托对角线证明

为了证明实数集是不可数集合,我们先假设实数集是可数集合,那么 [0,1][0,1][0,1] 内的实数集同样可数,因为可数集的子集一定是可数集。

现在让我们列举 [0,1][0,1][0,1] 内的实数。

r1=0.d11d12d13…r2=0.d21d22d23…r3=0.d31d32d33…⋮ \begin{aligned} r_1 & = 0.d_{11}d_{12}d_{13}\ldots \\ r_2 & = 0.d_{21}d_{22}d_{23}\ldots \\ r_3 & = 0.d_{31}d_{32}d_{33}\ldots \\ \vdots \\ \end{aligned} r1r2r3=0.d11d12d13=0.d21d22d23=0.d31d32d33

这里 dij={0,1,2,3,4,5,6,7,8,9}d_{ij} = \{0,1,2,3,4,5,6,7,8,9\}dij={0,1,2,3,4,5,6,7,8,9} ,根据上述列举的实数,我们能够构造出一个新的实数,即 r=0.d1d2d3…r = 0.d_1d_2d_3\ldotsr=0.d1d2d3

di={4ifdii≠45ifdii=4 d_i = \begin{cases} 4 & \text{if} & d_{ii} \neq 4 \\ 5 & \text{if} & d_{ii} = 4 \end{cases} di={45ififdii=4dii=4

易知,在枚举的rir_iri 中没有一个是和 rrr 相同的,也就是说实数是无法枚举出来的,所以实数集不是可数集。

现在我们讨论一下关于可数集的一些定理。

定理:如果 AAABBB 是可数集,那么 A∪BA \cup BAB 也同样是可数集。

我们可以通过 a1,b1,a2,b2,…a_1,b_1,a_2,b_2,\ldotsa1,b1,a2,b2, 进行交替枚举,因此可数集的并集也是可数集。

定理:(Cantor-Bernstein-Schroeder Theorem)是集合论基本定理。如果 ∣A∣≤∣B∣|A| \leq |B|AB 并且 ∣B∣≤∣A∣|B| \leq |A|BA 那么 ∣A∣=∣B∣|A| = |B|A=B 。换句话说,如果同时存在从 AAABBB 和从 BBBAAA 的单射函数,那么必定存在两个集合直接的双射函数。

尽管这个定理阐述的十分简单,但是证明起来却十分困难,读者可查阅相关资料。

现在我们讨论一下在计算机中的应用,那即是存在不可计算函数,指在任何计算机中都不能被计算的函数。

定义:我们说一个函数是 可计算的 ,当且仅当存在计算机和编程语言能够找到他的值,否则是 不可计算的

很显然,一定存在不可计算的函数,举例来说,一个计算[0,1][0,1][0,1]内所有实数的和是一个不可计算函数。

我们用一个更高级的理论结束本章。能够证明, Z+\mathbb{Z}^+Z+ 的幂集和 R\mathbb{R}R 等势,也就是说 ∣P(Z+)∣=∣R∣=c|\mathcal{P}(\mathbb{Z}^+)| = |\mathbb{R}| = \mathfrak{c}P(Z+)=R=c 其中 c\mathfrak{c}c 是实数集的势。

另外一个著名的结论,说明集合的势小于他幂集的势,因此 ∣Z+∣<∣P(Z+)∣|\mathbb{Z}^+| \lt |\mathcal{P}(\mathbb{Z}^+)|Z+<P(Z+) ,我们可以写作 ℵ0<2ℵ0\aleph_0 \lt 2^{\aleph_0}0<20 其中 2∣S∣2^{|S|}2S 指的是集合 SSS 幂集的势。因此 2ℵ0=c2^{\aleph_0} = \mathfrak{c}20=c

这引出著名的 连续性假设 ,这个假设断言不存在一个势数大于 ℵ0\aleph_00 并小于 c\mathfrak{c}c 。能够证明,最小的无限势数形成一个无限的序列 ℵ0<ℵ1<ℵ2<…\aleph_0 \lt \aleph_1 \lt \aleph_2 \lt \ldots0<1<2< ,如果这个假设是真的,那么 c=ℵ1=2ℵ0\mathfrak{c} = \aleph_1 = 2^{\aleph_0}c=1=20

矩阵

矩阵介绍

矩阵用于表示离散数学中元素在集合中的关系,在一下几个小节中将介绍矩阵的几个模型,例如,矩阵的通讯网络和传输系统模型。

定义:一个矩阵是一个矩形的数的数组,一个有 mmmnnn 列的矩阵称为 m×nm \times nm×n 矩阵。有相同的行数和列数的矩阵叫做方阵。两个矩阵相等,如果两个矩阵的行数和列数相同,并且对于位置上的元素也相同。

我们约定加粗的大写字母代表矩阵。

定义:矩阵的第 iii 行是一个 1×n1 \times n1×n 矩阵,矩阵的第 iii 列是一个 m×1m \times 1m×1 矩阵,我们将第 iii 行第 jjj 列的元素记为 aija_{ij}aij

矩阵算数

定义:矩阵的加法是对应位置上的元素相加,只有行数和列数相同的矩阵才能相加。

更重要的运算是矩阵的乘法。

定义:让 A\textbf{A}A 是一个 m×km \times km×k 矩阵,让 $B\textbf{B}B 是一个 k×nk \times nk×n 矩阵,两个矩阵相乘的结果 C=AB\textbf{C} = \textbf{A}\textbf{B}C=AB 是一个 m×nm \times nm×n 矩阵,记作 cij=∑p=1kaipbpjc_{ij} = \sum_{p = 1}^k a_{ip}b_{pj}cij=p=1kaipbpj

更详细的知识参考线性代数系列笔记。

矩阵的转置和幂

定义:单位矩阵是一个 n×nn \times nn×n 的方阵,其中主对角线上都是 111 其他位置都是 000 ,记作 In\textbf{I}_nIn

单位矩阵和任何矩阵相乘都等于矩阵本身。

定义: An\textbf{A}^nAn 表示矩阵和自身相乘 nnn 次。特别的 A0=In\textbf{A}^0 = \textbf{I}_nA0=In

最后一个是矩阵的转置。

定义: 矩阵 A\textbf{A}A 的转置记作 At\textbf{A}^tAt 并且 aijt=ajia^t_{ij} = a_{ji}aijt=aji

我们发现矩阵的转置的行数和列数正好和原矩阵相反。

特别的,一个矩阵是对称的,当且仅当它的转置和它本身相等。

零一矩阵

在离散数学中,矩阵重要的一个模型就是零一矩阵。即一个矩阵的元素要么是 000 要么是 111 。零一矩阵不同于一般的矩阵,因为他有布尔代数的性质,现在引出布尔代数算子。

b1∧b2={1b1=b2=10otherwise b_1 \wedge b_2 = \begin{cases} 1 & b_1 = b_2 = 1 \\ 0 & \text{otherwise} \end{cases} b1b2={10b1=b2=1otherwise

b1∨b2={1b1=1∨b2=10otherwise b_1 \vee b_2 = \begin{cases} 1 & b_1 = 1 \vee b_2 = 1 \\ 0 & \text{otherwise} \end{cases} b1b2={10b1=1b2=1otherwise

定义:两个矩阵的并记作 A∨B\textbf{A} \vee \textbf{B}AB 元素为对应元素进行 ∨\vee 运算,两个矩阵的交写作 A∧B\textbf{A} \wedge \textbf{B}AB 元素为对应元素进行 ∧\wedge 运算。

现在我们定义两个矩阵的 布尔积

定义:让 A\textbf{A}A 是一个 m×km \times km×k 矩阵,让 $B\textbf{B}B 是一个 k×nk \times nk×n 矩阵,两个矩阵布尔积的结果 C=A⊙B\textbf{C} = \textbf{A} \odot \textbf{B}C=AB 是一个 m×nm \times nm×n 矩阵,记作 cij=(ai1∧b1j)∨(ai2∧b2j)∨…∨(aik∧bkj)c_{ij} = (a_{i1} \wedge b_{1j}) \vee (a_{i2} \wedge b_{2j}) \vee \ldots \vee (a_{ik} \wedge b_{kj})cij=(ai1b1j)(ai2b2j)(aikbkj)

零一矩阵的布尔积就是矩阵相乘的离散模拟。用交代替称号,用并代替加号。

同样,我们定义幂运算。

定义: A[n]\textbf{A}^{[n]}A[n] 表示矩阵和自身做布尔积 nnn 次。特别的 A0=In\textbf{A}^0 = \textbf{I}_nA0=In

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐