【离散数学】基本结构——集合、函数、序列、矩阵

离散数学第二篇,首先讨论常用工具——集合,并讨论在集合基础之上的一系列结构:函数、序列、矩阵、关系等。所有内容在以前的知识体系中均有涉猎,此处是从集合的角度去考虑这些内容。我认为其中要数集合的基数这一小节中可数集和不可数集的部分最为抽象。这里仅仅涉及一些常用定义性质和精彩的证明。

首先,常用符号一览:

符号 含义 L a T e X (仅符号)
x A x属于集合A \in
x A x不属于集合A \notin
{ a 1 , a 2 , a 3 , , a n } 集合的元素列表(列举法) -
{ x | P ( x ) } 集合构造器记法(描述法) -
空集 \varnothing
A B A与B的交集 \cap
A B A与B的交集 \cup
C ¯ C的补集 \overline
A B A与B的差集 -
A B A与B的对称差 \oplus
P ( S ) 集合S的幂集 -
| S | 集合S的基数 -
S T S是T的子集 \subseteq
S T S是T的真子集 \subset
[ a , b ] , ( a , b ) 区间 -
( a 1 , a 2 , a 3 , , a n ) 有序n元组 -
A × B A和B的笛卡尔积 \times
0 可数无限集的基数(阿里夫零) \aleph
c 实数集的基数 -
f : A B f是从A到B的函数 \to
f 1 ( x ) 函数f的逆 -
f g 函数f和g的合成 \circ
x 向下取整函数 \lfloor \rfloor
x 向上取整函数 \lceil \rceil
累加 \sum
累乘 \prod
A + B 矩阵A与B的和 -
A B 矩阵A与B的积 -
A 1 可逆矩阵A的逆 -
A T A的转置矩阵 -
I n n阶单位阵
A B 0-1矩阵A与B的交 -
A B 0-1矩阵A与B的并 -
A B 0-1矩阵A与B的布尔积 -
A [ n ] 0-1矩阵A的n次布尔幂 -

集合

定义

集合(set)是对象/元素的一个无序的聚集。

通过列举出集合的所有元素的方式来表示集合的方法称为花名册方法(或列举法)。如 { a , b , c , d }

描述集合的另一种方式是集合构造器方法(或描述法),形如 A = { x | P ( x ) } 。其中 P ( x ) 是集合 A 中元素 x 共有的特征。

常用集合

N :自然数集
Z :整数集
Z + :正整数集
Q :有理数集
R :实数集
R + :正实数集
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 }

空集

符号表示,代表不含任何元素的集合。

朴素集合论

这里主要讨论由德国数学家康托尔建立的朴素集合论。但朴素集合论是有缺陷的。

罗素悖论:将集合分为两类,一类以自身为元素,另一类不以自身为元素。令第一类所有集合为元素构成的集合为 P ,第二类所有集合为元素构成的集合为 Q 。那么问题来了, Q P 还是 Q P ?
Q P ,则由第一类集合定义,必有 Q Q ,而由第二类集合定义,如果 Q Q ,则一定有 Q Q ,故矛盾。
Q P ,则必定有 Q Q ,则满足第一类集合定义,所以 Q P ,故矛盾。

罗素悖论的一种通俗表示:只给不给自己刮脸的人刮脸的理发师究竟给不给自己刮脸呢?

罗素悖论的提出动摇了数学的基础,这被称为第三次数学危机。后来公理集合论的出现成功化解了危机,通过提出几条公理避免了一系列的悖论。由于这里并不会涉及到如此抽象的讨论,所以使用朴素集合论并不会有影响。

集合关系

子集: A B 的子集,记作 A B 当且仅当 x ( x A x B )
真子集: A B 的真子集,记作 A B 当且仅当 x ( x A x B ) x ( x A x B )

显然, A
A ,其中 A

集合的大小

集合 S 中元素个数称为集合 S 的基数(cardinality),记作 | S |

注:这里的基数(cardinality)与计数中进制的基数(radix)明显不是一个概念。

无限集:一个集合的元素个数不是有限的则称为无限集。

幂集

幂集(power set):集合 S 的所有子集作为元素构成的集合,记作 P ( S ) 。幂集的基数 | P ( S ) | = 2 | S | (根据二项式定理得出,二项式定理下一篇介绍)。

如: P ( { } ) = { , { } }

集合运算

交集: A B = { x | x A x B } ,可扩展到多个集合。
并集: A B = { x | x A x B } ,同样可扩展到多个集合。
差集: A B = { x | x A x B }
补集: A ¯ = { x | x U x A } = U A ,其中 U 是全集, A ¯ 称为 A 相对全集 U 的补集。
则A与B差集 A B = A B ¯
对称差: A B = { x | ( x A B ) ( x A B ) } = ( A B ) ( A B ) = ( A B ) ( B A ) A B 的对称差,即只属于 A B 其中一个集合的元素构成的集合。

笛卡尔积

有序 n 元组: n 个元素的有序聚集,记作 ( a 1 , a 2 , a 3 , , a n )
如二维的坐标 ( x , y ) 就是一个有序二元组。有序二元组亦称序偶

集合的笛卡尔积:用 A × B 表示, A × B = { ( a , b ) | a A b B }

推广到多个集合: A 1 × A 2 × × A n = { ( a 1 , a 2 , a 3 , , a n ) | a i A i , i = 1 , 2 , , n }

笛卡尔积的一个子集 R 称为从集合 A 到集合 B 关系(relation)。将在后面的文章中单独讨论。

集合恒等式

集合的恒等律、支配律、幂等律等简单的略过。下面是三个重要的恒等式。
分配律:
A ( B C ) = ( A B ) ( A C )
A ( B C ) = ( A B ) ( A C )

德摩根律:
A B ¯ = A ¯ B ¯
A B ¯ = A ¯ B ¯
同样可拓展到多个集合。

吸收律:
A ( A B ) = A
A ( A B ) = A

可以看出集合恒等式与复合命题的逻辑等价式式是一一对应的,每个集合恒等式均可以由对应的逻辑等价式证明。

还可以看出集合的交并补运算,与数理逻辑的且或非运算,与布尔代数的与或非运算,与概率论中的和事件积事件互斥事件都有相似之处。其中数理逻辑的运算与布尔代数的逻辑运算是一一对应的,仅仅是表示不同而已(1和真,0和假)。而概率论中事件是可以按照集合的关系来理解的。这里可以看出数学的美妙之处(私以为)。

容斥原理

| A B | = | A | + | B | | A B | ,无须解释。

真值集

给定谓词 P 与论域 D ,在 D 中使 P ( x ) 为真的 x 的集合定义为 P 真值集
例如:谓词 P ( x ) 为“ x 2 = 2 ”,则 P 的真值集为 { 2 , 2 } .

特殊集合

多重集:
一般情况下讨论的集合中所有元素均是互斥(不同)的。在多重集中同一个元素可以出现多次。相应的有交集、并集、差集、和集等运算。

模糊集合:
在人工智能中经常使用模糊集合。全集中的元素在模糊集合中有一个隶属度(0~1之间),表示一个元素属于集合的程度。


函数

定义

A B 均为非空集合,为 A 中的每一个元素 a 都在 B 中由函数 f 指派一个唯一的元素 b ,使得 f ( a ) = b 。则称 f 是从A到B的函数(function),记作 f : A B

函数也称映射(mapping)或者变换(transformation)。

其中:
f 的定义域(domain): A
f 的陪域(codomain): B
f 的值域(range): { b | b = f ( a ) } ,即 A 中元素所有像的集合。
如果 f ( a ) = b ,则称 b a (image), a b 原像(pre-image),我们说 f A 映射到 B

一般,将变量为实数的函数称为实变函数,自变量为复数则称复变函数。中学中多讨论实变函数,大学阶段有讨论复变函数。定义域为正整数集的子集的特殊函数也称为数列(中学阶段)。集合 A 可以是多个集合的笛卡尔积,则函数具有多个自变量。

函数三要素:定义域 A ,陪域 B ,关系 f
当两个函数定义域、值域、关系均相同时,我们称两个函数相等。

陪域为实数集合的函数称实值函数,为整数集合称整数值函数。

一对一函数

函数称为一对一函数(one-to-one)或者单射函数(injection),当且仅当 a A b A ( f ( a ) = f ( b ) a = b ) 。即是对定义域内所有不同的 a ,在 B 中一定对应不同的像。

函数增减性:
对定义域 A 内所有 x y
单调递增: x y ( x < y f ( x ) f ( y ) )
严格递增: x y ( x < y f ( x ) < f ( y ) )
单调递减: x y ( x < y f ( x ) f ( y ) )
严格递减: x y ( x < y f ( x ) > f ( y ) )

显然,严格单调递增或者递减的函数一定是一对一的。

映上函数

函数称为映上(onto)或者满射(surjiection)函数,当且仅当 y B   x A ( f ( x ) = y ) 。即是陪域 B 中所有元素均是定义域 A 中元素的像。

一一对应函数

函数称为一一对应的(one-to-one correspondence)或者双射函数(bijection),如果函数即是一对一的又是映上的。即是陪域 B 中所有元素均是 A 中唯一的一个元素的像。

反函数

对于一个从 A B 的一一对应 f f 反函数(或者叫 f )是这样一个函数,它给 B 中每个元素 b A 中指派了一个唯一的使得 f ( a ) = b 的元素 a 。表示为 f 1 ,于是 f ( a ) = b 时有 f 1 ( b ) = a

一一对应关系是可逆的。如果一个函数不是一一对应的,则不可逆,即它不存在反函数。

复合函数

如果 g 为从 A B 的函数, f 为从 B C 的函数。则函数 f g 合成(composition)记作 f g ,定义为对于所有 a A

f g ( a ) = f ( g ( a ) )

注意: f g 没有定义除非 g 的值域是 f 的定义域的子集。

函数的图

f 为从 A B 的函数,则函数 f 的图像是序偶集合 { ( a , b ) | a A f ( a ) = b }
将序偶作为坐标描绘在坐标系中即是我们所熟知的函数图像。

一些重要函数

传统的耳熟能详的函数就不列出了。这里考虑几个在计算机科学中使用较多的函数。

取整函数

向上取整函数: f ( x ) = x ,是从实数集 R 到整数集 Z 的函数。 f ( x ) 是大于等于 x 的最小整数。
向下取整函数: f ( x ) = x ,是从实数集 R 到整数集 Z 的函数。 f ( x ) 是小于等于 x 的最大整数。

阶乘函数

从自然数集 N 到正整数集 Z + 的函数 f : N Z + f ( n ) = { 1 , n = 0 n ! = n × ( n 1 ) × × 2 × 1 , n Z +

由高等数学可以得出: n ! 2 π n ( n e ) n 读作渐进于 f ( n ) g ( n ) 的意义是

lim n f ( n ) g ( n ) = 1

部分函数

部分函数指将集合 A 的一个子集作为 f 的定义域的函数,对于在 A 中但不在定义域中的元素无定义。仍记作 f : A B ,具体意义由上下文判断。当定义域为 A 是称 f 为全函数。


序列与求和

序列

序列(sequence)是整数集的一个子集(通常是集合 { 0 , 1 , 2 , . . . } 或者 { 1 , 2 , 3 , . . . } )到集合 S 的函数。用记号 a n 表示 n 的像, a n 称为序列的一个项。我们用记号 { a n } 来表示序列。

高中时我们称其为数列

一些特殊序列

几何级数(多称等比数列):形如

a , a r , a r 2 , a r 3 , . . . , a r n , . . .
的序列,其中初始项 a 和公比 r 均为实数。
几何级数是指数函数 f ( x ) = a r x 的离散形式。

算术级数(多称等差数列):形如

a , a + d , a + 2 d , . . . , a + n d , . . .
的序列,其中初始项 a 和公差 d 均为实数。
算术级数是一次函数 f ( x ) = d x + a 的离散形式。

递推关系

递推关系(recurrence relation)是一个等式,对于所有满足 n n 0 n ,用序列的 a n 前面的一项或多项来表示 a n 。一个递推关系递归地定义了一个序列。

在计算机编程中,经常用到递归算法,这就需要找到其递推关系。

初始条件递推关系即可唯一确定一个序列。

由递推关系和初始条件求数列通项公式,这在高中时是一个经典的问题,在此不再赘述。

斐波那契数列

斐波那契数列(Fibonacci squence)是一个非常经典与常用的数列,定义如下:
初始条件 f 0 = 0 , f 1 = 1 ,递推关系:

f n = f n 1 + f n 2 n = 2 , 3 , 4 , . . .

即序列 0 , 1 , 1 , 2 , 3 , 5 , 8 , 13 , 21 , . . .

特殊的整数数列

存在着许许多多/数不清的特殊的整数数列,应用于广泛的领域。有一个从20世纪60年代就创建的数据库保存着很多数列。可参见《在线整数序列大百科》(OEIS)。

求和

很多时候需要考虑序列的求和(summation)问题,因此引入了求和记号 Σ (大写的希腊字母Sigma),对于序列 { a n } 中的部分项:

a m , a m + 1 , . . . , a n
之和可表示为:
i = m n a i o r m i n a i

即代表:
i = m n a i = a m + a m + 1 + + a n

对于几何数列/等比数列:

a , a r , a r 2 , a r 3 , . . . , a r n , . . .

n 从0开始,即 a 0 = a ,则有:
j = 0 n a r j = { ( n + 1 ) a , r = 1 a r n + 1 a r 1 , r 1

求和方法:将和式乘以 r ,与和式错位相消即可(高中知识)。

一些常用求和公式

算术级数求和: k = 1 n k = n ( n + 1 ) 2

k 2 和: k = 1 n k 2 = n ( n + 1 ) ( 2 n + 1 ) 6

k 3 和: k = 1 n k 3 = n 2 ( n + 1 ) 2 4

x k 和: k = 0 x k = 1 1 x

证明: k = 0 x k = lim k x k + 1 1 x 1 = 1 1 x

上式两边同时求微分:
k = 1 k x k 1 = 1 ( 1 x ) 2

累乘

记号: Π (大写的希腊字母pi)

形式:

i = m n a n = a m × a m + 1 × × a n


集合的基数

定义&定理

前面有过定义,集合的基数即集合的大小,即集合中的元素个数。集合 S 的基数记作 | S |

当且仅当存在一个从集合 A 到集合 B 一一对应时,集合 A B 基数相等,记作 | A | = | B |

当且仅当存在一个从集合 A 到集合 B 一对一函数时,集合 A 的基数小于等于 B 的基数,记作 | A | | B |
| A | | B | | A | | B | 时, | A | < | B |

可数集

一个集合是可数集当且仅当一个集合是有限集或者一个集合与整数集具有相同的基数
一个集合是不可数的当它不是可数的。

整数集 Z 的基数记作 0 (其中 是希伯来字母表第一个字母,读作阿里夫)。即是所有无限可数集 S 均具有相同的基数,用 0 表示,即 | S | = 0

我们可以通过某种规律将可数集中的所有元素列举出来。不能列举出所有元素的集合即是不可数集。可以通过证明不能将集合中的所有元素列举出来来证明集合是不可数的。
例如整数集 Z ,列举出所有元素即是: . . . , n , . . . 2 , 1 , 0 , 1 , 2 , . . . , n , . . .

定理:如果 A B 均是可数集,则 A B 是可数集。

不可数集

整数集 Z 是可数集,实数集 R 是不可数集。

下面给出实数集 R 是不可数集的证明:
考虑实数集的一个子集 ( 0 , 1 ) ,假设可以将其全部列出,为序列 r 1 , r 2 , r 3 , r 4 , . . . ,用十进制表示如下:

r 1 = 0. d 11 d 12 d 13 d 14 . . . r 2 = 0. d 21 d 22 d 23 d 24 . . . r 3 = 0. d 31 d 32 d 33 d 34 . . . r 4 = 0. d 41 d 42 d 43 d 44 . . . r 5 = 0. d 51 d 52 d 53 d 54 . . .

其中 d i j { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 } .
现取一个0和1之间的实数 r = 0. d 1 d 2 d 3 d 4 . . .
其中 d i 随便取一个与 d i i 不同的数即可, i = 0 , 1 , 2 , . . .
r 与序列中的所有 r i 均不相等(即不在序列中),因为 r r i 的第 i 位不相同。
( 0 , 1 ) 内所有实数不能一一列举出来。即可证明集合 ( 0 , 1 ) 是不可数集,即实数集的子集是不可数集,则实数集 R 是不可数集。

上述证明方法称为康托尔对角线法,在数理逻辑和计算理论中大量使用。

S C H R O ¨ D E R B E R N S T E I N 定理

说实话,这个定理的名称我都读不清楚,大概是施罗德 - 伯恩斯坦定理。但这并不妨碍对定理的理解。

S C H R O ¨ D E R B E R N S T E I N 定理:如果集合 A B 满足 | A | | B | | B | | A | ,则 | A | = | B | 。即是如果存在从 A B 的一对一函数 f ,和 B A 的一对一函数 g ,则一定存在从 A B 的一一对应函数。

这个定理使得我们只需要找到一个从 A B 的一对一函数 f ,和 B A 的一对一函数 g ,即可证明 | A | = | B | 。而这是很轻松的。
例如:证明 | ( 0 , 1 ) | = | ( 0 , 1 ] |
如果没有这个定理,那然我们找一个从 ( 0 , 1 ) ( 0 , 1 ] 的一一对应函数明显是比较困难的。而现在我们只需要找到一个从 ( 0 , 1 ) ( 0 , 1 ] 的一对一函数,和从 ( 0 , 1 ] ( 0 , 1 ) 的一对一函数即可。

有从 ( 0 , 1 ) ( 0 , 1 ] 的一对一函数: f ( x ) = x
有从 ( 0 , 1 ] ( 0 , 1 ) 的一对一函数: f ( x ) = x 2
即证得 | ( 0 , 1 ) | = | ( 0 , 1 ] |

不可计算函数

如果一个函数是可计算的,如果可以通过某种编程语言写出来的计算机程序计算该函数。一个函数不是可计算的,则称为不可计算函数。

通过证明计算机程序集合是可数无限的,且一个可数无限集到自身的函数集合是不可数的,则可证明存在不可计算函数。

连续统假设

可以证明 | P ( Z + ) | = | R | = c ,即 c = 2 0 ,其中 c 是实数集的基数。

由康托尔的一个定理表明 | Z + | < | P ( Z + ) | ,即是 0 < 2 0 = c

连续统假设:不存在介于 0 c 之间的基数 X 。证明略,这里太窄写不下(手动滑稽)。


矩阵

矩阵(matrix)可以表示集合中元素的关系。线性代数中学过的,这里从略。

m × n 阶矩阵: A m × n =

[ a 11 a 12 a 1 n a 21 a 22 a 2 n a m 1 a m 2 a m n ]

定义略,方阵略,加法运算略,乘法运算略,转置略,单位阵略,逆矩阵略,乘幂略,对称矩阵略,均略过就好。

0-1矩阵

顾名思义,元素非 0 1 的矩阵,常用来表示各种离散结构,如不带权的有向图和无向图。
既然元素都是 0 1 ,那当然是进行布尔运算了。

0 1 矩阵的交: A = [ a i j ] B = [ b i j ] 都是 m × n 0 1 矩阵,则 A B = [ a i j b i j ]
0 1 矩阵的并: A = [ a i j ] B = [ b i j ] 都是 m × n 0 1 矩阵,则 A B = [ a i j b i j ]

0 1 矩阵的布尔积: A = [ a i j ] m × k 0 1 矩阵, B = [ b i j ] k × n 0 1 矩阵,则A和B的布尔积为 A B = [ c i j ] ,其中

c i j = ( a i 1 a 1 j ) ( a i 2 a 2 j ) ( a i k a k j )

布尔幂:对0-1方阵,

A [ r ] = A A A A r A


结语

这一篇足足花了10个小时左右,这也算是有史以来最长的一篇。写完之后总是让我有一种抄书的感觉,自己的理解比较少,以后要改变。

满篇的公式让我思考这到底是写笔记还是写公式?公式的输入真的比较费劲,很多时间都用来处理公式了,就权当熟悉LaTeX了。还是写完一段之后统一处理公式效率比较高。

假期即将过半,而任务还未过半。嗯,该看看书了。


参考资料:《离散数学及其应用》(本科教学版,Kenneth H.Rosen著,原书第七版)

猜你喜欢

转载自blog.csdn.net/qq_35527032/article/details/79349547