离散数学课程中应用案例的设计

2021-08-05 05:05:36何睿
魅力中国 2021年16期

何睿

(重庆工程学院 软件学院,重庆 400000)

离散数学作为计算类专业的核心课程,旨在让学生理解并掌握基本理论与方法,培养学生的抽象能力与逻辑思维能力。通过对离散数学的学习,学生可以使用离散数学作为工具,对软件工程学科问题进行描述、分析、研究,达到对软件工程专业领域相关问题进行离散建模求解的能力目标[1]。

国际工程教育认证是推动新工科建设的重要手段。国际工程教育认证标准对学生的“工程知识”提出了“学以致用”的要求。包括两个方面,其一,学生必须具备解决复杂工程问题所需数学、自然科学、工程基础和专业知识;其二,能够将这些知识用于解决复杂工程问题。前者是对知识结构的要求,后者是对知识运用的要求[2]。2020版的国际工程教育认证手册中,要求举例说明运用数学知识解决复杂工程问题的培养环节,提高了运用数学知识的要求。

一、问题的提出

目前,离散数学课程的教学理念仍侧重于数学理论的推导演绎,注重训练学生的逻辑能力、抽象能力[3],缺少在实际生活或专业领域的应用案例,对学生运用知识解决复杂工程问题的能力培养不够,导致学生学而不知其所用,产生“离散数学没有用”的疑惑。

按照国际工程教育的理念和要求,在传授理论知识的基础上,还需要引入软件工程领域问题,尤其是添加以专业背景的场景案例,并运用离散数学的知识分析问题,提出解决方案。

在离散数学课程中,不仅培养学生体会数学的抽象、推理、逻辑能力,而且能够学以致用,与后续专业课程建立联系,打通数学与软件专业课程的任督二脉。

根据适合的应用场景设计教学案例,是实现这个课程目标的关键。下面以离散数学中的特征函数为例,讨论应用案例的设计思路。

二、应用案例设计

离散数学中讨论的函数都是离散函数,主要关注离散结构之间的函数关系。它是定义在离散集合上的特殊关系,把一个离散对象变换成另一个离散的对象。离散函数是开关理论、自动机理论和可计算理论的基础,在计算机、软件工程等学科及应用领域中有重要的意义[4]。

特征函数是离散函数中的教学内容,将离散的对象映射到0或1,在知识层面非常简单,但能够解决很多复杂的问题。例如数据处理中,对高维数据降维,得到易处理的特征向量,为数据运算提供支撑;在集合的交、并等运算中,避免数值的多样性导致数值的比较变得复杂的情况。

(一)离散数学中的特征函数

特征函数直接定义在集合上,映射到0、1两个值,很容易与计算机中的二进制联系,因此,选择集合的交、并、补等运算作为特征函数的应用场景,并按照分析问题、提出解决方案、编程实现的思路设计教学案例。

(二)分析问题:运用特征函数解决集合运算

可将 集合运算表示为公式(8)、(9)。

按照上述思路,很容易使用特征函数表示集合的其他运算。

(三)解决方案:设计算法

按照表2.1所示的特征函数映射关系,可设计出特征函数的算法,特征函数XA的伪代码如下所示。

表2.1 特征函数XA和XB的映射表

算法1:求特征函数

按照上述方法,也可设计出计算特征函数的算法。

遍历全集中的所有元素,并使用作为条件判当元素是否为中的元素,设计出求交集的算法。

算法2:求交集

按照相同的方法,可设计求的算法。

算法3:求并集

按照上述思路,很容易设计出其它集合运算的算法,这部分内容可作为学生练习。

(四)编程实现

在计算机中,有很多方法可表示和存储集合。为了简单方便,可选数组。

const int n = 15;

int E[15]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};

int A[]={1,3,5,7,9,11,13,15};

int B[]={1,2,5,8,9,10,13};

也可使用数组存储如表2.1所示的特征函数映射关系。

int Xa[15], Xb[15];

在计算特征函数的算法中,包含了集合的属于运算,可先编写一个函数实现此运算,其代码如下。

根据计算特征函数的算法,可编写出计算特征函数的程序,其代码如下。

根据计算集合运算的算法,可编写出相应的程序,如计算的代码如下。

(五)运用特征函数的局限性

上述解决方案中,假设了母集是已知的,如果不知道母集的元素,怎样设计计算集合运算的解决方案?实际上,在不知道母集的情况下,运用特征函数解决集合的运算问题,集合的定义更加复杂。通过上述提问,作为学术拓展练习,让学生体会到运用特征函数解决工程问题的局限性,明确方法的适用场景。同时,将教学内容延展至算法分析与设计的内容,与其他专业课程紧密相连。

三、总结

本文结合国际工程教育认证对新工科建设方向标准,提出在原离散数学课程的教学方法中,添加专业领域或生活实际的案例。为与后续专业课建立练习,教学案例的思路按照分析问题、提出解决方案、编程实现进行设计。

以离散数学的特征函数解决集合的运算为例,分析集合运算,以特征函数为解决方案,分析设计算法,并提供了使用C语言编程实现算法的关键代码。最后讨论了特征函数使用的局限性。