离散数学在计算机程序设计中的作用
2017-03-24张小卫
张小卫
摘 要:离散数学是现代数学的一个分支,作为学习计算机的有力数学工具,是很多计算机相关专业课程学习的先行课程。文章将主要通过离散数学与计算机科学的相关性、离散数学的知识在数据结构与算法中的作用以及离散数学对程序员的隐性作用,简单地阐述离散数学在计算机程序中的作用。
关键词:离散数学;数据结构与算法;数学修养;计算机程序设计
中图分类号:G793 文献标识码:A
一、离散数学与计算机程序设计的关系
为了让计算机能解决某个问题,人类必须将解决问题的思路和方法通过计算机语言发出,使计算机按照人类的思路按顺序执行指令——编程。对于具体的问题实例,首先建立适当的数学模型,设计最优的算法以解决数学模型。数学模型的建立需要从实际问题中抽象出数据,寻求其关系,用数学的语言描述之,故算法设计和数据结构是计算机程序设计的两大支柱。此外完整的编程包括程序编写与调试,程序测试等多方面理论和技术,并不是一个简单的编写代码的过程。对于实际问题,可操作对象和数据是非连续的,寻求离散量之间的关系需要借助离散数学的思想方法和理论。因此,离散数学是计算机程序设计的数学工具,计算机编程是离散数学的实践应用。
二、离散数学对数据结构与算法中的作用
数据是现实的客观事物,关系是任意两个数据之间存在的一个或多个关系,利用计算机求解实际问题,必须将数据存储到计算机上,需要考虑数据的性质和存储结构(虚拟存储结构/逻辑存储结构)。数据结构主要研究数据、逻辑结构以及基本操作运算。离散数学中的图论思想主要体现在数据结构的四大主要结构——集合、线性表结构(一对一关系)、树形结构(一对多关系)、图形結构(多对多关系)。著名的哥白斯堡七桥(一笔画)问题就是由瑞士数学家莱昂哈德·欧拉利用图论的基本思想解决了的,同时开创了数学新的分支——图论。图论将“点”由“边”构造关系,利用边加上权值可以解决诸如经济最小成本、交通网络的最大流、交通运输最小费用等问题。
数据结构与算法密不可分:数据结构都需要算法的支持,数据结构的选择直接决定算法的时间复杂度。通常情况下,选择合适的数据结构能够有效降低时间或者空间复杂度。解决实际问题,首先要分析问题,选择合适的数据结构。诸如公司存储管理员工资料问题,优先选择链表:登记注册新员工的资料(增加)、员工退出(删除)、核实员工资料(查找)、校正员工信息(更改)、增加(或删除)时间复杂度为0(1),而顺序表则为0(n);对于查找和更改,两者复杂度均为0(n)。
三、离散数学对编程者数学修养的作用
计算机需要学习离散数学,不仅是编程本身需要,同时也可以提高数学修养。程序本质是逻辑,程序运行结果就是逻辑推理演算的结果。将人类的思路翻译成计算机编程语言需要很强的逻辑性、精确性;不少编程初学者缺乏思维逻辑的锻炼,导致思维断断续续和不严谨,或者对一些稍难的程序无从下手。
数学修养包含程序员的数学观察力、数字敏感、离散抽象思维能力、逻辑思维能力、数学学习能力等,并不全在于储备数学知识的多少。程序与数学结合紧密,像数学归纳法在程序中的运用也比较常见——hanoi塔、Fibonacci数列、阶乘函数等问题递归的实现;学习离散数学不仅要会应用公式,透过现象看本质,学习知识的思想方法才是根本,遇到实际问题能够学以致用,运用数学思想方法进行抽象建模。程序员没有经过系统的学习数学虽可以解决问题,但大多存在三个主要问题:一则耗时;二则不利于软件周期内的交流,他们可以读懂每一行代码,但是预测不到大概结果,甚至对程序的功能一知半解;三则性能不佳——一个“好”的算法应该考虑算法的效率,预估算法的效率以降低软件工程的成本来符合软件工程标准化准则。数学学习能力建立在数学知识的积累基础之上,帮助我们学习更高深、更晦涩的理论知识——IT是一个时刻在更新的行业,需要不断扩充知识。
学习离散数学必须认识到离散数学的重要性,它不仅能在计算机程序中得到应用,更是培养程序员逻辑思维能力等隐性条件的工具。学好离散数学可为计算机程序设计奠定良好的数学基础。
参考文献:
[1]严蔚敏,吴伟民.数据结构(C语言版)[M].北京:清华大学出版社,1997.
[2]陈 敏,李泽军.离散数学在计算机学科中的应用[J].电脑知识与技术,2009(9).