第四章 数学数据类型
4.1集合
集合(set):通俗地说,集合(就是一堆对象,这些对象称为集合中的元素( element)。集合中的元素可以是任意的:数字、空间中的点,或是其他集合。一般来说,集合以一对大括号表示。
例如:
对于大规模的无限集合,我们可以通过描述集合的生成方式来定义集合:
注意:
- 集合中的元素没有前后顺序之分。
- 集合中不存在重复的元素,对任意对象来说,它要么是、要么不是这个集合的元素。
4.1.1 常用集合
常用集合的符号表示:
4.1.2 集合的比较和组合
S ⊆ T S\subseteq T S⊆T:表示集合S是集合T的子集,即集合S的每一个元素也同时是集合T的元素。(S和T可以相等)
S ⊈ T S \not\subseteq T S⊆T:表示集合S不是集合T的子集。
S ⊂ T S\subset T S⊂T:表示集合S是集合T的真子集。(S和T不相等)
S ⊄ T S \not\subset T S⊂T:表示集合S不是集合T的真子集。
集合组合的几种基本方式:
X : : ={1,2,3}
Y : : ={2,3,4}
-
A ∪ \cup ∪B:集合A和B的并集,包含属于A或B或同时属于A,B的元素。
X ∪ \cup ∪Y = {1,2,3,4}
-
A ∩ \cap ∩B:集合A和B的交集,包含同时属于A和B的所有元素。
X ∩ \cap ∩Y = {2,3}
-
A-B:集合A和B的差集 ,包含在A但不在B中的元素。
X-Y = {1},Y-X= {4}
4. A ‾ \overline{A} A:集合A的补集,表示全域中所有不包含A的元素。
4.1.3 幂集
幂集:集合A的所有子集构成的集合称为A的幂集POW(A)
一般来说,如果A有n个元素,那么pow(A)共包含 2 n 2^n 2n个集合。
4.1.4 集合构造器标记
集合构造器标记是指对于那些不能通过直接列举元素,或是简单集合的并集和交集等,来描述的很难定义的集合,我们使用谓词来定义集合,即取使谓词为真的所有取值来构成一个集合。
例:
4.1.5 证明集合相等
如果两个集合拥有完全相同的元素,那么这两个集合相等。也就是说,X=Y是指,对所有元素z,z∈X当且仅当z ∈ Y。"所以,集合相等可以通过 “iff” 定理来形式化定义和证明。
命题操作和集合操作:
我们可以采用检查相关谓词公式的永真性,来证明集合相等。
例如根据德摩根律
我们可以推导出德摩根定律对应的集合等式:
虽然命题操作和集合操作是相互对应的,但是一定不要混淆。“AND” “OR” 等操作只适用于真值,而 $\cup $ ∩ \cap ∩ 等操作只能应用于集合。如果错误使用,会导致其类型错误。
4.2 序列
集合是一种对对象进行分组的方法。另一个方法是序列,即对象的列表,这些对象又称序列的组件、成员或元素。一般用小括号表示,如(a,b,c)是一个三元序列。
集合和序列的区别:
- 集合中的元素是各不相同的,而序列中的元素可以重复。因此,(a, b, a)是一个长度为3的序列,而{a, b,a}是一个包含两个元素而不是三个元素的集合。
- 序列中的元素是有顺序的,而集合中的元素没有顺序。例如,(a, b,c)和(a, c,b)是两个不同的序列,而{a,b,c}和{a,c,b}是相同的集合。
- 空序列的标记不统一,这里我们使用 λ \lambda λ表示空序列。
集合和序列都有积运算。集合的笛卡儿积, S 1 × S 2 × … × S n S1×S2×…× Sn S1×S2×…×Sn ,是一个由序列构成的新集合,其中序列的第一个组件来自S1,第二个组件来自S2,依此类推。
例:
4.3 函数
4.3.1 域和像
函数将集合(称作域)中的每个元素,赋值给另一个集合(称作陪域)中的元素。记为: f : A − > B f:A->B f:A−>B。 f f f表示定义在域 A A A和陪域 B B B上的函数
例:
f
1
(
x
)
:
:
=
1
x
2
f_1(x) :: = \frac{1}{x^2}
f1(x)::=x21
其中x是一个实值变量
f
2
(
y
,
z
)
:
:
=
y
10
y
z
f_2(y,z)::=y10yz
f2(y,z)::=y10yz
其中y和z是二进制字符串
此外,还可以通过计算域中每个元素的值来定义函数。例如,定义
f
5
(
y
)
f_5(y)
f5(y)等于自左至右查找二进制字符串y直至找到1时的字符长度,即
f
5
(
0010
)
=
3
f_5(0010) = 3
f5(0010)=3
f 5 ( 100 ) = 1 f_5(100) = 1 f5(100)=1
f 5 ( 0000 ) = 未定义 f_5(0000) = 未定义 f5(0000)=未定义
注:由以上几个例子我们可以看出来,该处定义的函数与我们数学意义上的函数不太一样,它更像我们计算机中的函数。输入可以是各种数据类型的数据,通过执行定义的某种操作,输出结果,其结果也可以是各种数据类型。
数学中的函数:函数的近代定义是给定一个数集A,假设其中的元素为x,对A中的元素x施加对应法则f,记作f(x),得到另一数集B,假设B中的元素为y,则y与x之间的等量关系可以用y=f(x)表示。
数集:正整数集、有理数集等
偏函数:定义域中可能存在某些元素没有被定义函数值。例如以上的 f 5 ( 0000 ) f_5(0000) f5(0000)
全函数:如果函数在定义域内的每一个元素上都有定义,则称之为全函数。
我们常常需要确定函数在某个参数集合上的值集。因此,如果 f : A → B f:A →B f:A→B, S S S是 A A A的子集,我们定义 f ( S ) f(S) f(S)为函数 f f f在 S S S的元素上的所有函数值的集合。即:
**像:**在某个参数集合
S
S
S上应用
f
f
f ,即将
f
f
f逐点应用于
S
S
S,集合
f
(
S
)
f(S)
f(S)称为
S
S
S在
f
f
f下的像。
f
f
f在所有可能的参数上应用,得到的值的集合,称为
f
f
f的值域。即:
值域(
f
)
:
:
=
f
(
域(
f
)
)
值域(f):: =f(域(f))
值域(f)::=f(域(f))
4.3.2 函数复合
抽象地说就是,在一系列步骤之后应用一个函数,然后接着应用下一个函数,依次继续,这种操作就是复合函数。函数 f f f和 g g g复合,意思是首先在参数上应用 f f f,得到 f ( x ) f(x) f(x),然后在这个结果上应用 g g g,得到 g ( f ( x ) ) g(f(x)) g(f(x))。
定义:对函数
f
:
A
→
B
f :A →B
f:A→B和函数
g
:
B
→
C
g:B→C
g:B→C,复合函数
g
o
f
g o f
gof 是从
A
A
A到
C
C
C的函数,定义如下:
对所有
x
∈
A
,
(
g
o
f
)
(
x
)
:
:
=
g
(
f
(
x
)
)
x ∈ A,(g o f)(x)::= g(f(x))
x∈A,(gof)(x)::=g(f(x))
4.4 二元关系
二元关系:定义了两个对象之间的关系。如实数的小于关系、子集关系等。
二元关系 R R R由以下三部分构成:
- 集合 A A A,称为R的域。
- 集合 B B B,称为R的陪域。
- A × B A × B A×B的子集,称为 R R R的图。
域为
A
A
A、陪域为
B
B
B的二元关系通常表述为“
A
A
A与
B
B
B之间”或“从
A
A
A到
B
B
B”。对于函数来说,
R
:
A
−
→
B
R:A -→ B
R:A−→B,
表示从
A
A
A到
B
B
B的关系
R
R
R。如果域和陪域是同一个集合
A
A
A,则简单表述为
A
A
A上的关系。通常,使用
a
R
b
aR b
aRb表示
(
a
,
b
)
(a,b)
(a,b)在图
R
R
R中。
二元关系与函数的区别:
函数:对于每个域元素a来说,图中至多存在一个对,满足该对的第一个元素是a。(不可以存在一对多的关系)
二元关系:可以存在一对多的关系。
其他区别:
二元关系的关系图是其笛卡尔积的子图,只要是子图即可,没有别的限制。
而函数关系的图要求比较严格,对于每个域元素a来说,图中至多存在一个对,满足该对的第一个元素是a。
4.4.1 关系图
关系的一些标准属性可以以图的形式可视化。在二元关系 R R R的关系图中,左边的列表示域,点表示域中的元素(如果 R R R的域无限大,那么列会非常长),右边的列表示陪域元素。箭头从左边的点 a a a(即域列)指向右边的点 b b b(即陪域列),表示关系 R R R中的元素对。
例:
二元关系的属性:
注意:
关系图中的箭头其实就是R中的对。但是,只知道箭头本身并不足以确定R的属性,我们还需知道 R R R的域是什么。
4.4.2 关系的像
函数的像的概念可以直接拓展至关系的像。
**定义:**关系 R R R下的集合 Y Y Y的像,记为 R ( Y ) R(Y) R(Y),表示陪域 B B B中与 Y Y Y的某个元素对应的元素集合。用关系图解释, R ( Y ) R(Y) R(Y)就是从 Y Y Y中的某个点出发、箭头所指向的那些点的集合
**逆关系:**关系
R
R
R的逆即
R
−
1
:
A
→
B
R^{-1}:A→B
R−1:A→B表示从
B
B
B到
A
A
A的关系,定义如下
换句话说,将R关系图中的箭头方向反过来,就得到
R
−
1
R^{-1}
R−1。
**逆像:**关系 R − 1 R^{-1} R−1下集合的像称为这个集合的逆像。
4.5 有限基数
**定义:**如果A是有限集(指含有有限个元素的集合),那么A的基数|A|指A中元素的个数。
注:有限集中可以没有元素。
如果 R : A − > B R:A->B R:A−>B 是一个函数:那么 ∣ A ∣ > = 箭头个数 |A| >= 箭头个数 ∣A∣>=箭头个数
如果 R R R是满射:那么 箭头个数 > = ∣ B ∣ 箭头个数>=|B| 箭头个数>=∣B∣
综上所述,如果 R R R是满射函数,则: ∣ A ∣ > = ∣ B ∣ |A|>=|B| ∣A∣>=∣B∣
定义与引理:
上述引理经推导可进一步扩展为:(这个地方没看明白,我认为|A|>=|B|并不能推出 A surj B)
4.5.1 有限集有多少个子集
定理:如果一个集合有 n n n个元素,那么该集合有 2 n 2^n 2n个子集。即:
实际上上述定理讲述的是,从 A A A的子集到 n n n比特序列 ( 0 , 1 ) n ({0,1})^n (0,1)n之间存在一个简单的双射。即,令 a 1 , a 2 , … … , a n a_1,a_2,……,a_n a1,a2,……,an是 A A A的元素,则每个子集 S ⊆ A S \subseteq A S⊆A到比特序列 { b 1 , . . . , b n } \{b_1,...,b_n\} {b1,...,bn}之间的双射定义如下:
例如,如果 n = 10 n = 10 n=10,则子集 { a 2 , a 3 , a 5 , a 7 , a 1 0 } \{a_2, a_3,a_5, a_7,a_10\} {a2,a3,a5,a7,a10}到1 0比特序列的映射为: