《计算机科学中的数学》学习笔记(04 数学数据类型)

书本信息:

作者: [美] Eric Lehman / [美] F. Thomson Leighton / [美] Albert R. Meyer
出版社: 电子工业出版社
出品方: 博文视点
副标题: 信息与智能时代的必修课
原作名: Mathematics for Computer Science

04 数学数据类型


在计算机科学和数学中,有许多常用的数据类型,例如:
集合(Sets):集合是一种包含不同元素(element)的无序集合。集合中的元素可以是任何类型的对象,例如数字、字母、其他集合等。
序列(Sequences):序列是一种有序的元素集合。与集合不同,序列中的元素是有顺序的,且可以重复。例如,{1, 2, 2, 3} 是一个序列。
函数(Functions):函数是一种将输入(domain)映射到输出(range)的关系。例如,f(x) = x^2 是一个函数,将实数映射到它们的平方。
元组(Tuples):元组是一种有序的元素集合,与序列类似。但是,元组通常用于包含有限数量的元素,且每个元素都有特定的含义和位置。例如,(x, y) 可以表示一个二维平面上的点。
向量(Vectors):向量是一种有序的数值集合,通常用于表示物理量(如速度和加速度)或者空间中的点。例如,(1, 2, 3) 可以表示三维空间中的一个点或者一个方向。
矩阵(Matrices):矩阵是一种二维的数值表,通常用于表示

线性变换或者解决线性方程组。例如,[[1, 2], [3, 4]] 是一个 2x2 的矩阵。
图(Graphs):图是一种由节点(vertices)和边(edges)组成的结构,通常用于表示对象之间的关系。例如,网络、社交网络、Web页面链接等都可以用图来表示。
树(Trees):树是一种特殊的图,其中任意两个节点之间只有一条路径。树常用于表示层级关系,如文件系统、HTML DOM 树等。

1、集合

在数学中,集合是一个包含不同元素的无序集合。集合中的元素可以是任何类型的对象。

1.1 常用集合

  • 空集(Empty Set):没有元素的集合,表示为 ∅。
  • 自然数集(Set of Natural Numbers):所有非负整数的集合,表示为 N 或 ℕ。
  • 整数集(Set of Integers):所有整数的集合,表示为 Z 或 ℤ。
  • 有理数集(Set of Rational Numbers):所有可以表示为两个整数比例的数的集合,表示为 Q 或 ℚ。
  • 实数集(Set of Real Numbers):所有实数的集合,表示为 R 或 ℝ。
  • 复数集(Set of Complex Numbers):所有复数的集合,表示为 C 或 ℂ。

1.2 集合的比较和组合

  • 子集(Subset):如果集合 A 中的每一个元素都在集合 B 中,那么我们说 A 是 B 的子集,表示为 A ⊆ B。
  • 真子集(Proper Subset):本书中称为严格子集(strict subset)如果 A 是 B 的子集,并且 A 不等于 B,那么我们说 A 是 B 的真子集,表示为 A ⊂ B。
  • 并集(Union):集合 A 和 B 的并集是一个包含 A 和 B 中所有元素的集合,表示为 A ∪ B。
  • 交集(Intersection):集合 A 和 B 的交集是一个包含同时在 A 和 B 中的所有元素的集合,表示为 A ∩ B。
  • 差集(Difference):集合 A 和 B 的差集是一个包含在 A 中但不在 B 中的所有元素的集合,表示为 A - B 或 A \ B。
  • 补集(Complement):如果 U 是全集,集合 A 的补集是一个包含在 U 中但不在 A 中的所有元素的集合,表示为 A’ 或 A^c。

1.3 幂集(Power Set)

集合 A 的幂集是 A 的所有子集构成的集合,表示为 pow(A) 或 2^A。例如,如果 A = {1, 2},那么 pow(A) = {∅, {1}, {2}, {1, 2}}。

1.4 集合构造器标记(Set Builder Notation)

集合构造器标记是一种表示特定属性的元素集合的方式,主要思想是使用谓词(Predicates)定义集合,即使谓词为真的所有取值构成一个集合。例如,集合 {x ∈ Z | x > 0} 表示所有大于 0 的整数。

1.5 证明集合相等

要证明两个集合 A 和 B 相等,我们需要证明 A 中的每一个元素都在 B 中,且 B 中的每一个元素都在 A 中。

2、序列

序列是一种有序的元素集合。与集合不同,序列中的元素是有顺序的,且可以重复。序列通常用小写字母表示,例如 a、b、c 等,其中 a_n 表示序列 a 的第 n 个元素。

2.1 集合的笛卡尔积(扩展)

长度为2的序列称为对(pair),对于两个集合 A 和 B,它们的笛卡尔积(Cartesian Product)是一个新的集合,其中的元素是所有可能的有序对 (a, b),其中 a ∈ A,b ∈ B。笛卡尔积通常表示为 A × B。

例如,如果 A = {1, 2},B = {a, b},那么 A × B = {(1, a), (1, b), (2, a), (2, b)}。

笛卡尔积可以扩展到更多的集合。例如,A × B × C 是所有可能的3比特序列 (a, b, c) 的集合,其中 a ∈ A,b ∈ B,c ∈ C。

2.2 序列的几种积运算(扩展)

在数学中,序列的积运算通常指的是将序列中的所有元素相乘。这种运算在数学中被称为乘积(product)。

有限序列的积(Product of a Finite Sequence)
对于有限序列 (a1, a2, …, an),我们可以定义其积为所有元素的乘积:
∏ i = 1 n a i = a 1 ⋅ a 2 ⋅ . . . ⋅ a n \prod_{i=1}^{n} a_i = a_1 \cdot a_2 \cdot ... \cdot a_n i=1nai=a1a2...an

例如,序列 (2, 3, 4) 的积是 2 × 3 × 4 = 24。

无穷序列的积(Product of an Infinite Sequence)
对于无穷序列,我们可以定义部分乘积(partial product),部分乘积是将序列的前 n 个元素相乘。

如果部分乘积的极限存在,我们就说这个无穷序列的乘积收敛(converges),否则我们就说该无穷序列的积发散。例如,对于序列 (1/2, 1/3, 1/4, …),其部分乘积的极限为 0,所以我们说这个序列的乘积收敛到 0。

序列的哈达玛积(Hadamard product)
哈达玛积(Hadamard product),也被称为元素级乘积(element-wise product)或者逐元素乘积(entrywise product),是一种特殊的序列或者向量的乘积。

对于两个长度相同的序列(或向量)A和B,它们的哈达玛积是一个新的序列(或向量)C,具体来说,如果有两个序列A = (a1, a2, a3, …, an)和B = (b1, b2, b3, …, bn),那么它们的哈达玛积C = (c1, c2, c3, …, cn)满足ci = ai × bi。

例如,假设我们有两个序列A = (a1, a2, a3) 和B = (b1, b2, b3),那么它们的哈达玛积C = (a1 × b1, a2 × b2, a3 × b3)。

哈达玛积可以用于表示两个向量的逐元素乘积,常用于矩阵计算和线性代数中。在计算机科学中,哈达玛积常用于处理图像和信号处理中,可以对两个相同尺寸的图像或信号进行逐像素或逐样本的操作。

哈达玛积具有一些特点,例如:

  1. 哈达玛积只有在两个序列的长度相等时才能进行。
  2. 哈达玛积的结果序列的长度和输入序列相同。
  3. 哈达玛积是逐元素进行的乘法运算,不同于矩阵乘法或向量点积。
  4. 哈达玛积可以用于对序列进行逐元素的筛选或过滤操作。

3、函数

函数是一种关系,它将一个集合(称为定义域)中的元素映射到另一个集合(称为陪域)中的一个元素。记为:

f : A → B f: A \rightarrow B f:AB

表示f是一个具有定义域A和陪域B的函数。熟悉的记法 “f(a) = b” 表示f将元素a映射到元素b。在这里,b被称为函数f在参数a处的值。

本书的翻译有很多问题,首先是将“ …assigns…to…”翻译成了“赋值”,这里使用“映射”更恰当;另外,书中将“ an element of one set, called the domain”翻译成“集合中的每个元素”,这就成了全函数(Total Functions)的定义,实际上原书是有对全函数和偏函数做区分的。

3.1 域和像

本书的翻译将Codomain翻译成“陪域”及“到达域”,在某些文献中“到达域”指的就是“值域(Range)”。
定义域(Domain)
本书的翻译将domain翻译成“域”,也就是通常所说的“定义域”,定义域是函数输入的集合。也就是说,定义域包含了所有可以输入到函数中的值。

值域(Range)
值域是函数可以产生的所有值的集合。在上述的f(x) = x²的例子中,值域是所有的非负实数。

陪域(Codomain)
值域是函数实际能够输出的值的集合,而陪域是在定义函数时设定的可能的输出值的集合,可能包含函数实际上永远不会输出的值。

例如,考虑函数f(x) = x²,在定义函数时,我们可能会设定陪域为所有的实数,尽管这个函数永远不会输出负数。在这个例子中,值域(所有的非负实数)是陪域(所有的实数)的一个子集。

像(Image)
在某些文献中像(Image)和值域(Range)是同一个概念。
但是本书原文对“像”的描述为:

Applying f to a set S of arguments is referred to as “applying f pointwise to S”, and the set f .S/ is referred to as the image of S under f .

也就是说,将函数f应用于一组参数S,被称为“对S逐点应用f”,并且集合f(S)被称为S在f下的像,这里的S为定义域的子集。如果S为定义域,那么得到的集合f(S)就是值域。

偏函数(Partial Functions)
在数学和计算机科学中,偏函数是只对其定义域的一个子集定义的函数。换句话说,对于定义域中的某些输入,偏函数可能没有定义输出。例如,函数f(x) = 1/x 是一个偏函数,因为它没有定义在x=0的地方。

全函数(Total Functions)
与偏函数相对的是全函数。全函数是对其整个定义域都有定义的函数。换句话说,对于定义域中的任何输入,全函数都有一个明确的输出。例如,函数f(x) = x² 是一个全函数,因为对于所有的实数x,都有一个明确的输出x²。

在计算机科学中,全函数和偏函数的概念特别重要,因为它们帮助我们理解和处理可能的错误和异常情况。例如,如果一个函数在某些输入上没有定义,那么在编程时,我们需要特别注意处理这些情况,以防止错误和程序崩溃。

3.2 函数复合

函数复合(Function Composition)是一种将两个函数结合在一起的操作,形成一个新的函数。如果我们有两个函数f和g,那么它们的复合函数(记作f(g(x))或(f ∘ g)(x))是一个新的函数,它首先将x输入到g中,然后将g(x)的结果输入到f中。

例如,假设f(x) = x²和g(x) = x + 1。那么复合函数f(g(x)) = (x + 1)²。这个新的函数首先将x加1,然后将结果平方。

4、二元关系

二元关系是集合论中的一个重要概念,它描述了两个集合之间元素的某种关系。在数学中,二元关系通常表示为一个有序对的集合。

一个二元关系R从集合A到集合B(记作R: A → B)由以下三个部分组成:

  1. 定义域(Domain):集合A,这是关系的起始点。

  2. 陪域(Codomain):集合B,这是关系的结束点。

  3. 关系集(Set of ordered pairs):一个有序对的集合,每个有序对(a, b)表示a与b之间存在某种关系,a来自集合A(定义域),b来自集合B(值域)。书中使用了图(graph)这个概念来表示关系集,原书中"a subset of A × B called the graph of R"即A与B的笛卡尔积的子集称为R的图(graph)。关系R的关系集是A和B的笛卡尔积的子集:
    R ⊆ A × B R \subseteq A \times B RA×B

二元关系和函数在某些方面是相似的,但也有重要的区别:

函数是一种特殊的二元关系。在函数中,定义域中的每个元素都与陪域中的一个元素有关系,而且这个关系是唯一的。也就是说,如果f是一个从A到B的函数,那么对于A中的每一个元素a,都存在一个唯一的元素b(在B中),使得(a, b)在关系f中。

二元关系则没有这种唯一性的要求。在一个二元关系中,定义域中的一个元素可能与陪域中的多个元素有关系,也可能一个都没有。

4.1 关系图

关系图(Relation Diagrams)是一种可视化工具,用于表示二元关系中的元素如何关联。在关系图中,通常将定义域的元素放在一边,将陪域的元素放在另一边,然后用箭头来表示元素之间的关系。

下面是如何通过关系图判断一个二元关系的性质:

  1. 函数(Function):如果定义域中的每一个元素都最多有一个箭头指向陪域中的元素,那么这个二元关系就是一个函数(包括全函数与偏函数)。如果定义域中的每一个元素都有且仅有一个箭头指向陪域中的元素,那么这个二元关系就是一个全函数(Total Functions)。

  2. 满射(Surjective):如果陪域中的每一个元素都有至少一个箭头指向它,那么这个二元关系就是满射。

  3. 全映射(Total):如果定义域中的每一个元素都有至少一个箭头指向陪域中的元素,那么这个二元关系就是全映射。

  4. 单射(Injective):如果陪域中的每一个元素最多有一个箭头指向它,那么这个二元关系就是单射。

  5. 双射(Bijective):如果定义域中的每一个元素都有且仅有一个箭头指向陪域中的元素,并且陪域中的每一个元素都有且仅有一个箭头指向它,那么它就是双射。

以上定义均考虑了偏函数(partial functions)的情况,在有些文献中没有将偏函数当作函数,相关性质的定义是不同的,例如,“如果一个函数既是满射又是单射,那么它就是双射”该定义中的“函数”指的是全函数(Total Functions)。

4.2 关系的像

  1. 关系的像(Relational Images):给定一个二元关系R从集合A到集合B,以及A中的一个子集Y,我们可以定义R在Y上的像为B中的那些与Y中的某个元素相关联的元素的集合。关系R下集合Y的像可以写作:
    R [ Y ] = { b ∈ B ∣ ( a , b ) ∈ R  for some  a ∈ Y } R[Y] = \{b \in B | (a, b) \in R \text{ for some } a \in Y\} R[Y]={bB(a,b)R for some aY}

  2. 逆关系(Inverse Relations):给定一个二元关系R从集合A到集合B,我们可以定义R的逆关系为从B到A的关系,其中B中的元素b与A中的元素a相关联当且仅当a与b在原始关系R中相关联。关系R的逆关系可以写作:
    R − 1 = { ( b , a ) ∣ ( a , b ) ∈ R } R^{-1} = \{(b, a) | (a, b) \in R\} R1={(b,a)(a,b)R}

  3. 逆像(Inverse Images):给定一个二元关系R从集合A到集合B,以及B中的一个子集X,我们可以定义R的逆像为A中的那些与X中的某个元素相关联的元素的集合。关系R下集合X的逆像可以写作:
    R − 1 [ X ] = { a ∈ A ∣ ( a , b ) ∈ R  for some  b ∈ X } R^{-1}[X] = \{a \in A | (a, b) \in R \text{ for some } b \in X\} R1[X]={aA(a,b)R for some bX}

5、有限基数

有限基数(Finite Cardinality)是一个集合论中的概念,用于描述一个集合中元素的数量。如果一个集合是有限个元素的集合,那么我们就说这个集合是有限集,它的基数(即元素的数量)就是一个有限基数。

例如,集合 {1, 2, 3, 4, 5} 的基数是5,因为它包含5个元素。

在数学符号中,我们通常使用管状符号“| |”来表示集合的基数。例如,如果我们有一个集合A,我们可以写 |A| 来表示A的基数。所以,对于上面的例子,我们可以写 |{1, 2, 3, 4, 5}| = 5。

一个从集合A(定义域)到集合B(陪域)的二元关系R,对于不同性质的R,|A|与|B|之间的关系如下:

  1. 如果R为满射(Surjective),可以写作A surj B,那么|A| ≥ |B|。
  2. 如果R为单射(Injective)且为全映射(Total),可以写作A inj B,那么|A| ≤ |B|。
  3. 如果R为双射(Bijective),可以写作A bij B,那么|A| = |B|。

5.1 有限集有多少个子集

如果一个有限集合有n个元素,那么它有2^n个子集。可以写作:|A| = n 蕴含 |pow(A)| = 2^n

这是因为每个元素都有两种可能的状态:要么在子集中(我们可以用1表示),要么不在子集中(我们可以用0表示)。所以,对于n个元素,总共有2n种可能的组合,即2n个子集。

不难发现,一个含有n个元素的有限集的子集个数与长度为n的二进制序列之间存在一个有趣的一一对应关系。

这是因为长度为n的二进制序列也有2n个,每个位置都可以是0或1,所以对于n个位置,总共有2n种可能的序列。

这两个事实建立了一个一一对应关系,即从一个含有n个元素的有限集的子集到长度为n的二进制序列的映射。具体来说,如果我们让集合的每个元素对应二进制序列的一个位置,那么我们可以通过以下规则来定义这个映射:如果一个元素在子集中,那么对应的位置就是1;如果一个元素不在子集中,那么对应的位置就是0。

例如,对于集合{a1, a2, a3},子集{a1, a3}对应的二进制序列就是101,因为a1和a3在子集中,而a2不在子集中。

这个一一对应关系说明,我们可以通过计算长度为n的二进制序列的数量来得到一个含有n个元素的有限集的子集数量,反之亦然。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值