本章,我们将学习所有离散结构的基础,集合。集合被用来组织对象。这些对象通常有相同的属性。我们先给出一些感性的定义。
定义:一个集合是一个无序容器,叫做元素或对象的集合。一个集合被说成包含它的元素。我们写法 a ∈ A a \in A a∈A 指的是元素 a a a 在集合 A A A 中。我们用记号 a ∉ A a \notin A a∈/A 称作元素 a a a 不在集合 A A A 中。
我们通常约定大写字母表示集合,小写字母表示元素。
表示集合有很多方法,经常使用的是 列举法 ,即将集合中的元素用花括号列出来,例如 A = { a , b , c , d } A=\{ a,b,c,d \} A={a,b,c,d} 即集合 A A A 中含有四个元素,分别是 a , b , c , d a,b,c,d a,b,c,d 。
有时候元素的数量可能很多,但是元素有一定的模式,此时我们就能用 … \ldots … 来表示省略,例如 A = { 1 , 2 , … , 99 , 100 } A = \{1,2,\ldots,99,100\} A={1,2,…,99,100} 来表示 1 1 1 到 100 100 100 的整数。
另外一种描述集合的方法称为 集合构造器 记号。我们描述集合元素的特征而不是列举元素。例如 O = { x ∈ Z + ∣ x ≤ 10 } O = \{x \in Z^+|x \leq 10\} O={x∈Z+∣x≤10} 表示集合 O O O 中包含小于等于 10 10 10 的正整数。
下面的这些集合是数学中经常使用的集合。通常用黑体或者空心花体表示。
名称 | 解释 |
---|---|
N \mathbb{N} N | 自然数集合(此书包含 0 0 0 ) |
Z \mathbb{Z} Z | 整数集合 |
Z + \mathbb{Z^+} Z+ | 正整数集合 |
Q Q Q | 有理数集合 |
Q + Q^+ Q+ | 正有理数集合 |
R R R | 实数集合 |
R + R^+ R+ | 正实数集合 |
C C C | 复数集合 |
回想一下我们区间记号的写法:
[ 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)={x∣a≤x≤b}={x∣a≤x<b}={x∣a<x≤b}={x∣a<x<b}
第一个被称为 闭区间 ,最后一个称为 开区间 。
注意数据类型或者类型的概念,在计算机科学中是基于集合的概念。也就是说,一个 数据类型 是一个集合,具有相同的操作在集合中。例如布尔类型就是 ${0,1}$ 具有两个元素的集合,集合中的元素可以进行与或非等操作。
定义:如果两个集合是是相同的,当且仅当他们有相同的元素。因此,如果 A A A 和 B B B 是相同的,当且仅当 ∀ x ( x ∈ A ⟺ x ∈ B ) \forall x (x \in A \iff x \in B) ∀x(x∈A⟺x∈B) 。我们写成 A = B A = B A=B 。
有一个特殊的集合没有任何元素,被称为 空集 写作 ∅ \emptyset ∅ 。用列举法表示为 { } \{\} {} 。
另外一个特殊的集合是 单集 ,这个集合的元素有且只有一个。
一个常见的困惑是 ∅ \emptyset ∅ 和 { ∅ } \{ \emptyset \} {∅} 的区别,我们发现,前者指的是空集,没有任何元素,后者是一个单集,有一个元素为空集。这就类比于计算机中的文件目录结构。
一些集合能够形象化的表示为韦恩图。在韦恩图中 全集 是指包含一切元素的集合(取决于你的研究对象),记作 U U U ,在韦恩图中用一个矩形表示。在矩形中,其他的几何元素例如圆表示一个集合,用点来表示一个具体的元素,用重叠关系来表示集合关系。
定义:集合 A A A 是集合 B B B 的子集如果集合 A A A 中所有的元素也在 B B B 中。我们使用记号 A ⊆ B A \subseteq B A⊆B 表示。
我们发现 A ⊆ B A \subseteq B A⊆B 等价于:
∀ x ( x ∈ A → x ∈ B ) \forall x (x \in A \to x \in B) ∀x(x∈A→x∈B)
韦恩图表示为 B B B 包含 A A A 。
定理:对于任何集合 S S S , ∅ ⊆ S \emptyset \subseteq S ∅⊆S 并且 S ⊆ S S \subseteq S S⊆S 。
这说明一个非空集合必有两个子集,一个是空子集,一个是他本身,这两个集合称为平凡子集。
当我们想强调 A A A 是 B B B 的一个子集但是 A ≠ B A \neq B A=B ,此时我们用记号 A ⊂ B A \subset B A⊂B 说明 A A A 是 B B B 的一个 真子集 。等价于下面的命题:
∀ 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(x∈A→x∈B)∧∃x(x∈B∧x∈/A)
如果我们想证明 A = B A = B A=B 我们可以证明 A ⊆ B A \subseteq B A⊆B 并且 B ⊆ A B \subseteq A B⊆A 。
定义:如果集合 S S S 有 n n n 个不同的元素,这里 n n n 是一个非负整数。我们说集合 S S S 是有限集合并且 n n n 是集合的势。集合的势被记作 ∣ S ∣ |S| ∣S∣ 。
另外,集合分为有限集合和无限集合。
定义:如果一个集合不是有限集合,那么他是无限集合。
许多集合问题都和它的子集有关,我们定义幂集这个概念。
定义:给定一个集合 S S S , S S S 的幂集是他所有子集的集合,记作 P ( x ) \mathcal{P}(x) P(x) 。
如果一个集合 S S S 有 n n n 个元素,那么他的子集有 2 n 2^n 2n 个,它幂集的势为 2 n 2^n 2n 。
集合有的时候并不是我们想要的结构,因为他是无序的。有时候我们需要一个有序的结构,称为 n n n 元组 。
定义:有序 n n n 元组 ( a 1 , a 2 , … , a n ) (a_1,a_2,\ldots,a_n) (a1,a2,…,an) 是一个有序集合, a 1 a_1 a1 作为第一个元素,以此类推。
我们说两个 n n n 元组相等,当且仅当对应位置上的元素均相同。
特别的, 2 2 2 元组被称为 有序对 。
定义:让 A A A 和 B B B 是集合,两个集合的笛卡尔积 A × B A \times B A×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)∣a∈A∧b∈B}
我们将定义推广至 n n n 个集合的笛卡尔积。
定义:多个集合的笛卡尔积 A 1 × A 2 × … × A n A_1 \times A_2 \times \ldots \times A_n A1×A2×…×An 是一个所有元素都是有序对的集合:
A 1 × A 2 × … × A n = { ( a 1 , a 2 , … , a n ) ∣ a 1 ∈ A 1 ∧ a 2 ∈ A 2 ∧ … ∧ a n ∈ A n } 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)∣a1∈A1∧a2∈A2∧…∧an∈An}
我们使用记号 A 2 A^2 A2 表示运算 A × A A \times A A×A ,同理 A n A^n An 即 n n n 次 A A A 的笛卡尔积。
一个 A × B A \times B A×B 的子集 R R R 被称为是从 A A A 到 B B B 的关系 。
有了集合,我们就可以引入集合限定域,例如 ∀ x ∈ S ( P ( x ) ) \forall x \in S (P(x)) ∀x∈S(P(x)) 就是 ∀ x ( x ∈ S → P ( x ) ) \forall x (x \in S \to P(x)) ∀x(x∈S→P(x)) 的简写。
对于特称量词也同理。
我们将集合和量词的关系连接起来。定义谓词 P ( x ) P(x) P(x) 的 真值集合 { x ∈ D ∣ P ( x ) } \{x \in D | P(x)\} {x∈D∣P(x)} 指的是所有在全域 D D D 上使得 P ( x ) P(x) P(x) 为真的所有元素构成的集合。
对于两或多个集合,可以根据他们拥有元素的特征进行集合的运算。
定义:集合 A A A 和 B B B 的并集,记作 A ∪ B A \cup B A∪B ,是那些在 A A A 在 B B B 或者在两者中的所有元素构成的集合。
集合的并集等价于:
A ∪ B = { x ∣ x ∈ A ∨ x ∈ B } A \cup B = \{x | x \in A \vee x \in B\} A∪B={x∣x∈A∨x∈B}
用韦恩图表示为两者所有的面积。
定义:集合 A A A 和 B B B 的交集,记作 A ∩ B A \cap B A∩B ,是那些既在 A A A 又在 B B B 中的所有元素构成的集合。
集合的并集等价于:
A ∩ B = { x ∣ x ∈ A ∧ x ∈ B } A \cap B = \{x | x \in A \wedge x \in B\} A∩B={x∣x∈A∧x∈B}
用韦恩图表示为两者重叠部分的面积。
定义:两个集合是不交的,当且仅当两个集合的交集为空集。
我们有时对两个集合并集的集合的势的大小感兴趣,注意 ∣ A ∣ + ∣ B ∣ |A| + |B| ∣A∣+∣B∣ 将重叠部分的面积计算了两次,所有我们还有减去一次重叠面积,也就是:
∣ A ∪ B ∣ = ∣ A ∣ + ∣ B ∣ − ∣ A ∩ B ∣ |A \cup B| = |A| + |B| - |A \cap B| ∣A∪B∣=∣A∣+∣B∣−∣A∩B∣
上面的计算方法被称为 容斥原理 。
定义:两个集合的差集 A − B A - B A−B 是那些在 A A A 中 但不在 B B B 中所有元素构成的集合。也叫 A A A 的补相对于 B B B。
A − B = { x ∣ x i n A ∧ x ∉ B } A - B = \{x | x in A \wedge x \notin B\} A−B={x∣xinA∧x∈/B}
用韦恩图表示为用 A A A 的面积减去 B B B 的面积。
一旦全集 U U U 确定,那么我们即可以定义集合 S S S 的补集。
定义:集合 A A A 的补集,记作 A ˉ \bar{A} Aˉ 是 U − A U - A U−A 。
也就是说:
A ˉ = { x ∈ U ∣ x ∉ A } \bar{A} = \{x \in U | x \notin A\} Aˉ={x∈U∣x∈/A}
关于补集有个重要的恒等式:
A − B = A ∩ B ˉ A - B = A \cap \bar{B} A−B=A∩Bˉ
下面表展示了大部分的集合恒等式。
恒等式 | 名称 |
---|---|
A ∩ U = A A \cap U = A A∩U=A | 同一律 |
A ∪ ∅ = A A \cup \emptyset = A A∪∅=A | 同一律 |
A ∪ U = U A \cup U = U A∪U=U | 零律 |
A ∩ ∅ = ∅ A \cap \emptyset = \emptyset A∩∅=∅ | 零律 |
A ∪ A = A A \cup A = A A∪A=A | 幂等律 |
A ∩ A = A A \cap A = A A∩A=A | 幂等律 |
A ˉ ˉ = A \bar{\bar{A}} = A Aˉˉ=A | 双重否定律 |
A ∪ ( B ∪ C ) = ( A ∪ B ) ∪ C A \cup (B \cup C) = (A \cup B) \cup C A∪(B∪C)=(A∪B)∪C | 结合律 |
A ∩ ( B ∩ C ) = ( A ∩ B ) ∩ C A \cap (B \cap C) = (A \cap B) \cap C A∩(B∩C)=(A∩B)∩C | 结合律 |
A ∪ ( B ∩ C ) = ( A ∪ B ) ∩ ( A ∪ C ) A \cup (B \cap C) = (A \cup B) \cap (A \cup C) A∪(B∩C)=(A∪B)∩(A∪C) | 分配律 |
A ∩ ( B ∪ C ) = ( A ∩ B ) ∪ ( A ∩ C ) A \cap (B \cup C) = (A \cap B) \cup (A \cap C) A∩(B∪C)=(A∩B)∪(A∩C) | 分配律 |
A ∩ B ‾ = A ˉ ∪ B ˉ \overline{A \cap B} = \bar{A} \cup \bar{B} A∩B=Aˉ∪Bˉ | 德摩根律 |
A ∪ B ‾ = A ˉ ∩ B ˉ \overline{A \cup B} = \bar{A} \cap \bar{B} A∪B=Aˉ∩Bˉ | 德摩根律 |
A ∪ ( A ∩ B ) = A A \cup (A \cap B) = A A∪(A∩B)=A | 吸收律 |
A ∩ ( A ∪ B ) = A A \cap (A \cup B) = A A∩(A∪B)=A | 吸收律 |
A ∪ A ˉ = U A \cup \bar{A} = U A∪Aˉ=U | 互补律 |
A ∩ A ˉ = ∅ A \cap \bar{A} = \emptyset A∩Aˉ=∅ | 互补律 |
一些恒等式除了使用命题证明外,还可以使用 关系表 证明,关系表是类似于真值表的一个表,用 0 0 0 表示元素不在集合中,用 1 1 1 表示在集合中。
定义:一些集合的并集定义为元素至少在一个集合中。
也就是说:
A 1 ∪ A 2 ∪ … ∪ A n = ⋃ i = 1 n A i A_1 \cup A_2 \cup \ldots \cup A_n = \bigcup_{i=1}^n A_i A1∪A2∪…∪An=i=1⋃nAi
定义:一些集合的交集定义为元素在所有集合中。
也就是说:
A 1 ∩ A 2 ∩ … ∩ A n = ⋂ i = 1 n A i A_1 \cap A_2 \cap \ldots \cap A_n = \bigcap_{i=1}^n A_i A1∩A2∩…∩An=i=1⋂nAi
有很多方式可以在计算机中表示集合。假设全集是有限的,我们可以用一串二进制数来表示一个集合,例如第一位表示元素 a 1 a_1 a1 在不在集合中。
此时集合的交并补,正好对应二进制运算的 AND
和 OR
和 NOT
。
定义:让 A A A 和 B B B 是两个非空子集。一个函数 f f f 是给一个确定的 B B B 中元素给每一个 A A A 中的元素。我们写作 f ( a ) = b f(a) = b f(a)=b 这说明我们将 b b b 对应给 a a a 元素。这样的函数写作 f : A → B f: A \to B f:A→B 。
注意,函数有时也叫 映射 或者是 变换 。
描述函数的方式有很多种,一般数学上描述函数给出函数的公式,例如 f ( x ) = x + 1 f(x) = x+1 f(x)=x+1 ,函数也可看做是从 A A A 到 B B B 的关系的一种子集。如果存在 f ( a ) = b f(a) = b f(a)=b 那么一定存在 ( a , b ) (a,b) (a,b) 。
定义:如果函数 f : A → B f:A \to B f:A→B 那么我们称 A A A 是函数的域, B B B 是函数的陪域。如果 f ( a ) = b f(a) = b f(a)=b 我们称 b b b 是 a a a 的像,而 b b b 是原像。函数 f f f 的像或是值域指的是所有 A A A 中元素的像的集合。同时,我们也说是 f f f 是 A A A 到 B B B 的映射。
注意,两个函数相等当且仅当两个函数的域,陪域以及映射关系相同。当我们改变任意一个要素,我们得到是两个不同的函数。
一个函数称为 实值的 如果它的陪域是实数的集合,如果是 整值的 如果它的陪域是整数的集合,两个实值或是整值函数可以相加或者相乘。
定义:让 f 1 f_1 f1 和 f 2 f_2 f2 是两个 A → R A \to R A→R 的函数。此时 f 1 + f 2 f_1 + f_2 f1+f2 和 f 1 f 2 f_1f_2 f1f2 仍是 A → R A \to R A→R 的函数,分别为 ( f 1 + f 2 ) ( x ) = f 1 ( x ) + f 2 ( x ) (f_1 + f_2)(x) = f_1(x) + f_2(x) (f1+f2)(x)=f1(x)+f2(x) 和 ( f 1 f 2 ) ( x ) = f 1 ( x ) f 2 ( x ) (f_1f_2)(x) = f_1(x) f_2(x) (f1f2)(x)=f1(x)f2(x) 。
如果函数 f : A → B f: A \to B f:A→B 那么 A A A 子集的像也就能定义。
定义:如果 f f f 是从 A A A 到 B B B 的函数,让 S S S 是集合 A A A 的子集。子集 S S S 在 f f f 下的像是一个 B B B 的子集,包含每一 S S S 中元素的像,记作 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)={t∣∃s∈S(t=f(s))} 。
有时简记为 { f ( s ) ∣ s ∈ S } \{f(s) | s \in S\} {f(s)∣s∈S} 。
注意,写法 f ( S ) f(S) f(S) 是具有歧义的,可能是集合的像,也可能是集合的映射,出现歧义时要具体说明。
有时我们不会给两个不同域元素分配同样的值,这叫做 一对一函数 。
定义:如果函数是一对一函数或者是单射函数,当且仅当对于所有的 f ( a ) = f ( b ) f(a) = f(b) f(a)=f(b) 都有 a = b a = b a=b 。
我们给出单射函数的一些条件。
定义:一个域和陪域都是实数集合的函数 f f f 是单调递增的,当且仅当对于所有 x < y x \lt y x<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) 。单调递减也同理。
显然,一个严格单调递增函数或严格单调递减函数都是一个一对一函数。
有时,一个函数的陪域和值域相同,此时我们称这个函数是 满射函数 。
定义:如果一个函数是满射函数,当且仅当对于陪域中的任意一个元素 b b b 都能在域中找到元素 a a a 使得 f ( a ) = b f(a) = b f(a)=b 。
如果函数同时具有单射和满射的性质,我们称这个函数是一个 双射函数 。
定义:如果函数同时具有单射和满射的性质,我们称这个函数是一个双射函数,也称为是一一对应函数。
考虑一个一一对应函数,这个函数是满射的因此所有陪域中的元素都能找到一个原像对应,又因为是单射函数,所以原像是唯一的,那么反过来的关系也一定是函数。
定义: f f f 是一个一一对应函数,如果存在 f ( a ) = b f(a) = b f(a)=b 那它的反函数就存在 f − 1 ( b ) = a f^{-1}(b) = a f−1(b)=a 。
注意写法 f − 1 f^{-1} f−1 并不是指倒数。
有时也称反函数为 可逆 函数。
定义:函数 g g g 是 A A A 到 B B B 的函数,函数 f f f 是 B B B 到 C C C 的函数,这两个函数的复合函数记作 ( f ∘ g ) ( a ) = f ( g ( a ) ) (f \circ g)(a) = f(g(a)) (f∘g)(a)=f(g(a)) 。
也就是说,复合函数相当于是作用两次的函数,此时 g g g 的值域必须是 f f f 域的子集。
如果函数 f f f 存在反函数,那么 ( f − 1 ∘ f ) ( a ) = ι A ( a ) = a (f^{-1} \circ f)(a) = \iota_A(a) = a (f−1∘f)(a)=ιA(a)=a 并且 ( f ∘ f − 1 ) ( b ) = ι B ( b ) = b (f \circ f^{-1})(b) = \iota_B(b) = b (f∘f−1)(b)=ιB(b)=b 。
我们可以用 A × B A \times B A×B 的子集来描述任何从 A A A 到 B B B 的函数。
定义:让 f f f 是从 A A A 到 B B B 的函数。函数 f f f 的图是有序对集合 { ( a , b ) ∣ a ∈ A ∧ f ( a ) = b } \{(a,b) | a \in A \wedge f(a) = b\} {(a,b)∣a∈A∧f(a)=b} 。
定义:底函数 ⌊ x ⌋ \lfloor x \rfloor ⌊x⌋ 是不大于 x x x 的最大整数,顶函数 ⌈ x ⌉ \lceil x \rceil ⌈x⌉ 是不小于 x x x 的最小整数。
另外一个重要的函数是 阶乘函数 。
这些在具体数学中会具体讲解,因此不在赘述。
定义:如果函数 f f f 只在域 A A A 的子集下有定义,这个子集叫做定义域,此时函数被称为部分函数,如果定义域等于域,那么称为全函数。
部分函数的定义是为了更好的描述一些特殊函数的反函数,例如 x \sqrt{x} x 就是一个部分函数。因为在负整数部分没有定义。
序列是一些元素的有序列表,在一些离散问题上具有重要的作用,通常用于计数,而计数的基础是和式的计算,因此本章讲解序列和和式。
序列是一些元素的有序列表,例如 1 , 3 , 5 , 7 , 9 1,3,5,7,9 1,3,5,7,9 是一个有限序列,而 1 , 3 , 9 , … , 3 n 1,3,9,\ldots,3^n 1,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,…} )的函数,我们记作 a n a_n an 是 n n n 的像。我们将一系列的 a n a_n an 叫做是序列。
我们用 { a n } \{a_n\} {an} 这个序列来记作一个序列。
有限序列有时也称为是 串 ,串的长度是有限序列的长度,空串记为 λ \lambda λ 。
定义:用 a n a_n an 的前项( { a 1 , a 2 , … , a n − 1 } \{a_1,a_2,\ldots,a_{n-1}\} {a1,a2,…,an−1} )描述 a n a_n an 的方式称为递归描述。一个序列称为解,如果这个序列满足这个递归描述。
初始条件 指的是能开始递归的极小前几项,也就是说,确定了初始条件,那么就唯一的确定了其一个解。
如果我们找到了一个具有初始条件的迭代公式,我们称这个公式是其递归描述的一个 封闭公式 。
进一步展开将在具体数学系列笔记中说明,此处不在赘述。
如果想查询一个序列,可以访问 OEIS (On-Line
Encyclopedia of Integer Sequences) 数据库。
接下来,我们讨论序列的和式,我们引入 和式记号 ,假设我们有序列:
a m , a m + 1 , … , a n a_m,a_{m+1},\ldots,a_n am,am+1,…,an
将这些序列元素相加,我们记为:
∑ j = m n a j = a m + a m + 1 + … + a n \sum_{j=m}^n a_j = a_m + a_{m+1} + \ldots + a_n j=m∑naj=am+am+1+…+an
这里, j j j 称为 和式索引 通常使用字母 i , j , k i,j,k i,j,k 来表示。 m m m 称为和式的 下限 n n n 称为和式的 上限 。
定理:如果 a a a 和 r r r 都是实数且 r r r 不等于 0 0 0 ,那么:
∑ j = 0 n a r j = a r n + 1 − a r − 1 \sum_{j=0}^n ar^j = \frac{ar^{n+1} - a}{r - 1} ∑j=0narj=r−1arn+1−a 如果 r ≠ 1 r \neq 1 r=1
∑ j = 0 n a r j = ( n + 1 ) a \sum_{j=0}^n ar^j = (n+1)a ∑j=0narj=(n+1)a 如果 r = 1 r = 1 r=1
和式也是可以嵌套的,例如:
∑ i = 1 4 ∑ j = 1 3 i j \sum_{i=1}^4 \sum_{j = 1}^3 ij i=1∑4j=1∑3ij
处理嵌套和式我们从内部到外部处理,遇见外部变量当做为常量。
对于集合和式:
∑ s ∈ S f ( s ) \sum_{s \in S} f(s) s∈S∑f(s)
的意思是对所有 f ( s ) f(s) f(s) 求和,其中 s s s 是集合 S S S 中的所有元素。
无限和式也称为 级数 ,处理级数可能需要一些微积分的知识。
进一步展开将在具体数学系列笔记中说明,此处不在赘述。
下面给出常用的和式表:
和式 | 封闭形式 |
---|---|
∑ k = 0 n a r k ( r ≠ 0 ) \sum_{k=0}^n ar^k (r \neq 0) ∑k=0nark(r=0) | a r n + 1 − a r − 1 \frac{ar^{n+1} - a}{r - 1} r−1arn+1−a |
∑ k = 1 n k \sum_{k=1}^n k ∑k=1nk | n ( n + 1 ) 2 \frac{n(n+1)}{2} 2n(n+1) |
∑ k = 1 n k 2 \sum_{k=1}^n k^2 ∑k=1nk2 | n ( n + 1 ) ( 2 n + 1 ) 6 \frac{n(n+1)(2n+1)}{6} 6n(n+1)(2n+1) |
∑ k = 1 n k 3 \sum_{k=1}^n k^3 ∑k=1nk3 | n 2 ( n + 1 ) 2 4 \frac{n^2(n+1)^2}{4} 4n2(n+1)2 |
∑ k = 0 ∞ x k , a b s ( x ) < 1 \sum_{k=0}^\infty x^k,abs(x) \lt 1 ∑k=0∞xk,abs(x)<1 | 1 1 − x \frac{1}{1 - x} 1−x1 |
∑ k = 1 ∞ k x k − 1 , a b s ( x ) < 1 \sum_{k=1}^\infty kx^{k-1},abs(x) \lt 1 ∑k=1∞kxk−1,abs(x)<1 | 1 ( 1 − x ) 2 \frac{1}{(1 - x)^2} (1−x)21 |
在上一章我们介绍了有限集合的势就是集合元素的个数,本章介绍无限集合的势,以及等势,比较两个无限集合势大小的方法。
定义:如果两个集合 A A A 和 B B B 是等势的,当且仅当存在一个从 A A A 到 B B B (或从 B B B 到 A A A )的双射函数。我们说这两个集合是等势的,记作 ∣ A ∣ = ∣ B ∣ |A| = |B| ∣A∣=∣B∣ 。
对于集合势的定义,我们并不是直接测量集合的大小,而是通过相对的方法比较两个集合的势的大小关系。同理,集合势的大小也存在大小关系。
定义:如果存在从 A A A 到 B B B 的单射函数,我们说 A A A 的势小于等于 B B B ,写作 ∣ A ∣ ≤ ∣ B ∣ |A| \leq |B| ∣A∣≤∣B∣ 。进一步,如果 A A A 和 B B B 不等势,那么我们说 A A A 的势小于 B B B ,写作 ∣ A ∣ < ∣ B ∣ |A| \lt |B| ∣A∣<∣B∣ 。
我们将无限集合分成两类,一类和自然数集等势,另一类不等势。
定义:如果集合是有限的或者无限的但和正整数集合等势,那么这个集合叫做可数集合,否则叫做不可数集合。我们将可数集合的势记作 ℵ 0 \aleph_0 ℵ0 (读作阿列夫零),同时记作 ∣ A ∣ = ℵ 0 |A| = \aleph_0 ∣A∣=ℵ0 。
可数集合一个重要的特征是能够列举成序列的形式,因为序列的索引和正整数集是一一对应的。
根据可数集的定义,我们显然知道,整数集是可数集,但更重要的是,有理数集同样是可数集。
有理数可以写作是 p / q p/q p/q 的形式,那么我们让 p p p 作为列标,而 q q q 作为行标,这样就有了一个无限大的方格,我们以斜对角线的方式遍历这个无限大的方格,得到一个无限序列,因此有理数集同样是可数集。
我们已经知道了可数集的定义和例子,对于不可数集的讨论,实数集就是经典是不可数集合。我们使用著名的 康托对角线证明 。
为了证明实数集是不可数集合,我们先假设实数集是可数集合,那么 [ 0 , 1 ] [0,1] [0,1] 内的实数集同样可数,因为可数集的子集一定是可数集。
现在让我们列举 [ 0 , 1 ] [0,1] [0,1] 内的实数。
r 1 = 0. d 11 d 12 d 13 … r 2 = 0. d 21 d 22 d 23 … r 3 = 0. d 31 d 32 d 33 … ⋮ \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…
这里 d i j = { 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. d 1 d 2 d 3 … r = 0.d_1d_2d_3\ldots r=0.d1d2d3…
d i = { 4 if d i i ≠ 4 5 if d i i = 4 d_i = \begin{cases} 4 & \text{if} & d_{ii} \neq 4 \\ 5 & \text{if} & d_{ii} = 4 \end{cases} di={45ififdii=4dii=4
易知,在枚举的 r i r_i ri 中没有一个是和 r r r 相同的,也就是说实数是无法枚举出来的,所以实数集不是可数集。
现在我们讨论一下关于可数集的一些定理。
定理:如果 A A A 和 B B B 是可数集,那么 A ∪ B A \cup B A∪B 也同样是可数集。
我们可以通过 a 1 , b 1 , a 2 , b 2 , … a_1,b_1,a_2,b_2,\ldots a1,b1,a2,b2,… 进行交替枚举,因此可数集的并集也是可数集。
定理:(Cantor-Bernstein-Schroeder Theorem)是集合论基本定理。如果 ∣ A ∣ ≤ ∣ B ∣ |A| \leq |B| ∣A∣≤∣B∣ 并且 ∣ B ∣ ≤ ∣ A ∣ |B| \leq |A| ∣B∣≤∣A∣ 那么 ∣ A ∣ = ∣ B ∣ |A| = |B| ∣A∣=∣B∣ 。换句话说,如果同时存在从 A A A 到 B B B 和从 B B B 到 A A A 的单射函数,那么必定存在两个集合直接的双射函数。
尽管这个定理阐述的十分简单,但是证明起来却十分困难,读者可查阅相关资料。
现在我们讨论一下在计算机中的应用,那即是存在不可计算函数,指在任何计算机中都不能被计算的函数。
定义:我们说一个函数是 可计算的 ,当且仅当存在计算机和编程语言能够找到他的值,否则是 不可计算的 。
很显然,一定存在不可计算的函数,举例来说,一个计算 [ 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<2ℵ0 其中 2 ∣ S ∣ 2^{|S|} 2∣S∣ 指的是集合 S S S 幂集的势。因此 2 ℵ 0 = c 2^{\aleph_0} = \mathfrak{c} 2ℵ0=c 。
这引出著名的 连续性假设 ,这个假设断言不存在一个势数大于 ℵ 0 \aleph_0 ℵ0 并小于 c \mathfrak{c} c 。能够证明,最小的无限势数形成一个无限的序列 ℵ 0 < ℵ 1 < ℵ 2 < … \aleph_0 \lt \aleph_1 \lt \aleph_2 \lt \ldots ℵ0<ℵ1<ℵ2<… ,如果这个假设是真的,那么 c = ℵ 1 = 2 ℵ 0 \mathfrak{c} = \aleph_1 = 2^{\aleph_0} c=ℵ1=2ℵ0 。
矩阵用于表示离散数学中元素在集合中的关系,在一下几个小节中将介绍矩阵的几个模型,例如,矩阵的通讯网络和传输系统模型。
定义:一个矩阵是一个矩形的数的数组,一个有 m m m 行 n n n 列的矩阵称为 m × n m \times n m×n 矩阵。有相同的行数和列数的矩阵叫做方阵。两个矩阵相等,如果两个矩阵的行数和列数相同,并且对于位置上的元素也相同。
我们约定加粗的大写字母代表矩阵。
定义:矩阵的第 i i i 行是一个 1 × n 1 \times n 1×n 矩阵,矩阵的第 i i i 列是一个 m × 1 m \times 1 m×1 矩阵,我们将第 i i i 行第 j j j 列的元素记为 a i j a_{ij} aij 。
定义:矩阵的加法是对应位置上的元素相加,只有行数和列数相同的矩阵才能相加。
更重要的运算是矩阵的乘法。
定义:让 A \textbf{A} A 是一个 m × k m \times k m×k 矩阵,让 $ B \textbf{B} B 是一个 k × n k \times n k×n 矩阵,两个矩阵相乘的结果 C = AB \textbf{C} = \textbf{A}\textbf{B} C=AB 是一个 m × n m \times n m×n 矩阵,记作 c i j = ∑ p = 1 k a i p b p j c_{ij} = \sum_{p = 1}^k a_{ip}b_{pj} cij=∑p=1kaipbpj 。
更详细的知识参考线性代数系列笔记。
定义:单位矩阵是一个 n × n n \times n n×n 的方阵,其中主对角线上都是 1 1 1 其他位置都是 0 0 0 ,记作 I n \textbf{I}_n In 。
单位矩阵和任何矩阵相乘都等于矩阵本身。
定义: A n \textbf{A}^n An 表示矩阵和自身相乘 n n n 次。特别的 A 0 = I n \textbf{A}^0 = \textbf{I}_n A0=In 。
最后一个是矩阵的转置。
定义: 矩阵 A \textbf{A} A 的转置记作 A t \textbf{A}^t At 并且 a i j t = a j i a^t_{ij} = a_{ji} aijt=aji 。
我们发现矩阵的转置的行数和列数正好和原矩阵相反。
特别的,一个矩阵是对称的,当且仅当它的转置和它本身相等。
在离散数学中,矩阵重要的一个模型就是零一矩阵。即一个矩阵的元素要么是 0 0 0 要么是 1 1 1 。零一矩阵不同于一般的矩阵,因为他有布尔代数的性质,现在引出布尔代数算子。
b 1 ∧ b 2 = { 1 b 1 = b 2 = 1 0 otherwise b_1 \wedge b_2 = \begin{cases} 1 & b_1 = b_2 = 1 \\ 0 & \text{otherwise} \end{cases} b1∧b2={10b1=b2=1otherwise
b 1 ∨ b 2 = { 1 b 1 = 1 ∨ b 2 = 1 0 otherwise b_1 \vee b_2 = \begin{cases} 1 & b_1 = 1 \vee b_2 = 1 \\ 0 & \text{otherwise} \end{cases} b1∨b2={10b1=1∨b2=1otherwise
定义:两个矩阵的并记作 A ∨ B \textbf{A} \vee \textbf{B} A∨B 元素为对应元素进行 ∨ \vee ∨ 运算,两个矩阵的交写作 A ∧ B \textbf{A} \wedge \textbf{B} A∧B 元素为对应元素进行 ∧ \wedge ∧ 运算。
现在我们定义两个矩阵的 布尔积 。
定义:让 A \textbf{A} A 是一个 m × k m \times k m×k 矩阵,让 $ B \textbf{B} B 是一个 k × n k \times n k×n 矩阵,两个矩阵布尔积的结果 C = A ⊙ B \textbf{C} = \textbf{A} \odot \textbf{B} C=A⊙B 是一个 m × n m \times n m×n 矩阵,记作 c i j = ( a i 1 ∧ b 1 j ) ∨ ( a i 2 ∧ b 2 j ) ∨ … ∨ ( a i k ∧ b k j ) c_{ij} = (a_{i1} \wedge b_{1j}) \vee (a_{i2} \wedge b_{2j}) \vee \ldots \vee (a_{ik} \wedge b_{kj}) cij=(ai1∧b1j)∨(ai2∧b2j)∨…∨(aik∧bkj) 。
零一矩阵的布尔积就是矩阵相乘的离散模拟。用交代替称号,用并代替加号。
同样,我们定义幂运算。
定义: A [ n ] \textbf{A}^{[n]} A[n] 表示矩阵和自身做布尔积 n n n 次。特别的 A 0 = I n \textbf{A}^0 = \textbf{I}_n A0=In 。