【计科】计算机科学与技术,从离散数学到软件工程,从理学/抽象/科学到工学/具体/技术
文章目录
-
- [1、发展史与桥梁(离散数学 -> 算法/数据结构 -> 软件工程)](#1、发展史与桥梁(离散数学 -> 算法/数据结构 -> 软件工程))
- [2、离散数学(数理逻辑-命题/谓词/集合/函数/关系 -> 代数结构与图论)](#2、离散数学(数理逻辑-命题/谓词/集合/函数/关系 -> 代数结构与图论))
- [3、软件工程(需求 -> 结构/对象设计 -> 测试 -> 质量/成熟度/运维)](#3、软件工程(需求 -> 结构/对象设计 -> 测试 -> 质量/成熟度/运维))
1、发展史与桥梁(离散数学 -> 算法/数据结构 -> 软件工程)
从离散数学(理学/抽象/科学)到软件工程(工学/具体/技术)的发展过程,本质上是数学理论通过工程化思维转化为实际技术的过程。
这一链条体现了科学到工程的跨越,其核心在于 抽象模型的具象化 和 理论工具的实用化。
1. 抽象理论 => 工程思维的转换
- 从数学对象到编程实体
抽象数学概念 :集合、函数、关系、图、树、格(Lattice)、布尔代数等。
工程化实现 :
集合 → 编程语言中的Set
数据结构(如Python的set
)。
函数 → 编程中的子程序/方法(纯函数与副作用控制)。
图 → 邻接表/矩阵的存储结构(如社交网络的图数据库)。
关键转换:数学的"无类型"抽象被赋予具体类型和内存表示(如整数溢出处理)。 - 从命题逻辑到代码逻辑
抽象理论 :命题逻辑、谓词逻辑、一阶逻辑。
工程应用 :
条件分支(if-else
)对应逻辑蕴含(P → Q
)。
循环不变式(Loop Invariant)依赖谓词逻辑验证。
形式化规范工具(如TLA+)将数学逻辑转换为可执行检查的模型。
2. 科学严谨性 => 工程权衡
- 理想化假设 vs 现实约束
数学场景 :算法复杂度分析假设无限内存、均匀耗时操作(如O(1)
哈希查询)。
工程现实 :
缓存局部性、内存碎片化实际影响性能。
哈希冲突时退化为O(n)
链表查询(需动态扩容优化)。 - 精确性 vs 鲁棒性
数学追求 :算法的正确性证明(如Dijkstra算法的最优性)。
工程妥协 :
超时机制(防止最坏情况下的无限等待)。
启发式方法(如A*算法的估计函数h(n)
未必满足数学可纳性)。
- 技术演化路径
- 图论 => 网络技术
抽象理论 :欧拉回路、哈密顿路径、最大流最小割定理。
技术实现 :
TCP/IP路由协议(OSPF使用Dijkstra算法)。
内容分发网络(CDN)的图分区优化。 - 代数结构 => 密码学
抽象理论 :群、环、域、有限域上的椭圆曲线。
技术实现 :
AES加密(有限域GF(2^8)
的字节代换)。
区块链(椭圆曲线数字签名算法ECDSA)。 - 自动机理论 => 编译器/正则引擎
抽象理论 :DFA/NFA、正则语言、下推自动机。
技术实现 :
Lex/Yacc词法语法分析器。
正则表达式引擎(如PCRE库的NFA回溯优化)。
4.离散数学对比软件工程
维度 | 离散数学(理学) | 软件工程(工学) |
---|---|---|
目标 | 追求普遍性、严谨证明 | 解决具体问题、权衡效率与可维护性 |
表达形式 | 符号化(∀, ∃, ⇒) | 代码化(API设计、设计模式) |
验证方式 | 数学归纳法、反证法 | 单元测试、静态分析、模糊测试 |
优化方向 | 理论下界(如NP完全问题) | 工程优化(缓存、并行化、预计算) |
5.互相促进的过程
- 离散数学为软件工程提供 "设计语言" (如状态机描述系统)和 "质量标尺"(如复杂度边界)
- 工程实践则通过以下方式丰富理论:
暴露新问题 (如并发环境下的离散事件建模);
验证实用性 (如NP难问题的启发式算法有效性);
需求倒逼创新(如差分隐私将概率论引入数据安全)。 - 这一过程并非单向流动,而是 "抽象→具象→再抽象" 的螺旋上升,最终推动理论与技术共同演进。
6. 算法与数据结构的 "桥梁"与"翻译器"角色
- 它既将抽象的数学理论转化为可落地的技术方案,同时为工程实践提供科学化的方法论支撑。
- 理论到实践的转化器
递归(数学归纳法的程序表达)、动态规划(组合优化问题的递推解法)等,将数学思维直接映射为程序逻辑。 - 工程问题的科学化解题框架
数据结构(如树、哈希表)提供了组织数据的标准化模板,算法(如排序、搜索)定义了处理数据的流程规范。
如数据库索引-B树(高效磁盘I/O);缓存淘汰策略-LRU算法(基于哈希表+双向链表)。 - 抽象思维与工程思维的融合
离散数学研究"问题是否存在解",而算法与数据结构回答"如何高效实现解" 。 最后软件工程实现问题的解。
例如:NP完全问题(理论) =>启发式算法(工程妥协); 形式语言与自动机(抽象模型) => 正则表达式引擎(具体工具)。
约束条件 下的创新:工程需要平衡效率、可维护性、扩展性等,算法设计需**在数学最优性(如动态规划的最优子结构)与现实约束(如内存限制)**间折中。
参考资料:1
2、离散数学(数理逻辑-命题/谓词/集合/函数/关系 -> 代数结构与图论)
知识点概念:
-
考试分析
第1章 命题与命题公式(命题的符号化、逻辑联结词(¬, ∧, ∨, →, ↔)、命题公式的真值表与等价关系)
第2章 命题逻辑的推理理论(形式推理规则、自然演绎系统、公理化方法)
第3章 谓词逻辑(个体词、谓词、量词(∀, ∃)、一阶逻辑公式、解释与有效性)
第4章 集合(集合的运算(交、并、补)、包含关系、基数、集合的构造(如自然数的集合表示))
第5章 关系与函数(二元关系的性质(自反、对称、传递)、等价关系与划分、函数的类型(单射、满射、双射)、关系的闭包)
第6章 代数系统的一般概念(代数系统的定义(集合+运算)、半群、独异点、群、环、域、同态与同构)
第7章 格与布尔代数(偏序集、格的定义、分配格、有补格、布尔代数的性质)
第8章图(图的基本概念(顶点、边、路径、连通性)、特殊图(树、欧拉图、哈密顿图)、图的矩阵表示(邻接矩阵、可达矩阵)、平面图、图着色)
第9章图的应用(图论在计算机科学中的应用(如最短路径算法、网络流、匹配问题)、图的算法设计与分析)
-
第一级关系
1、命题逻辑 → 谓词逻辑:从简单命题扩展到带变量和量词的复杂表达 。
2、集合 → 关系与函数 → 代数系统:从集合的基本运算到结构化的代数系统 。
3、图论 → 图的应用:从理论到实际问题建模。
-
第二级关系
1、逻辑是基础 :
命题逻辑是谓词逻辑的基础,而谓词逻辑为代数系统和图论提供形式化工具 。
谓词逻辑:为代数系统(如群的公理化定义)和图论(如路径存在的形式化描述)提供严格的表达工具 。
2、代数系统与图论交叉 :
通过群论、矩阵运算等方法分析图的性质。
3、布尔代数作为桥梁 :
连接逻辑、代数和计算机科学(如电路设计、数据库索引)
布尔代数:既是代数系统(满足分配律、互补律等公理),又与命题逻辑的真值表运算完全对应(如逻辑与、或、非)。
维度 | 命题逻辑 | 谓词逻辑 | 代数系统 | 图论 |
---|---|---|---|---|
核心对象 | 命题(简单真假值) | 个体、谓词、量词 | 集合与运算(如群、环) | 顶点、边、路径等 |
表达能力 | 简单命题的组合 | 复杂关系与量词化的表达 | 结构化运算规则 | 离散结构的拓扑关系 |
主要工具 | 真值表、逻辑联结词 | 谓词、量词、形式公理 | 公理化定义(如结合律、单位元) | 图的矩阵表示(邻接矩阵)、算法 |
典型应用 | 逻辑电路、简单推理 | 数学证明、数据库查询 | 密码学、电路设计 | 网络分析、算法优化 |
MA238离散数学, 由两部分组成
-
1、数理逻辑与集合论
- 数理逻辑、命题逻辑、谓词逻辑之概念详细梳理
简而言之,数理逻辑就是精确化、数学化的形式逻辑 。
用数学的方法研究关于推理、证明等问题的学科就叫做数理逻辑,也叫做符号逻辑。
数理逻辑的主要分支包括:
逻辑演算(包括命题演算和谓词演算)、模型论、证明论、递归论和公理化集合论。 - 2.5 对偶式
将合取和析取反一下,把T和F反一下
2.6 范式(命题逻辑部分)
主析取范式和主合取范式互相转换
这一部分只可意会,注意极小项和极大项的性质
5.3 范式(谓词逻辑部分)
前束范式:量词都在前面
Skolem标准形:
一种是存在量词都在全称量词的右边(这种也叫存在前束范式)另一种是直接消去存在量词 - 5.5 推理演算
1.全称量词消去规则
2.全称量词引入规则
3.存在量词消去规则
4.存在量词引入规则
10.4 关系的性质
存在非空集合,既不是自反的,又不是非自反的。但是不存在非空集合,既是自反的,又不是非自反的。
对称性和反对称性,既可以同时满足,也可以同时不满足。
10.5 关系的闭包
自反,对称,传递
10.6 等价关系和划分
自反、对称、传递的关系
求等价关系的步骤:
先求有多少种划分
有一种划分就是一种等价关系!
10.8 偏序关系
线性序:也称全序。
全序:任何两个元素都有关系。
良序:对偏序集<A,<>,如果A的任何非空子集都有最小元,则称<为良序关系,称该集为良序集。
定理10.8.6:一个良序集一定是一个全序集。(反之不一定)
定理10.8.7:一个有限的全序集一定是良序集。
- 数理逻辑、命题逻辑、谓词逻辑之概念详细梳理
-
2、图论与代数结构
2.3 欧拉道路与回路
欧拉回路的充要条件:G中各结点的度数为偶数,欧拉道路的充要条件:只有2个度数为奇数的点。
Kruskal算法
过程:
1.初始化一个空的树
2.挑一个全局最短的边
3.如果加上这条边没有回路,就加上吧。顺便在原图中去掉4.重复2和3,直到树的边为n-1。
知识点ZJ
- 集合论
- 命题逻辑
- 谓词逻辑
- 关系
- 函数:
- 图
真题试卷
- 1
- 2
参考资料:
1-期末 zju, thu, sjtu nju zju
2-02324离散数学, 2, 3
3、软件工程(需求 -> 结构/对象设计 -> 测试 -> 质量/成熟度/运维)

知识点总结、考点串讲、考前复习-02333
- 第1章 绪论
1.1 软件工程概念的提出与发展
1.2 软件开发的本质 - 第2章 软件需求与软件需求规约
2.1 需求与需求获取
2.2 需求规约 - 第3章 结构化方法
3.1 结构化需求分析
3.2 结构化设计 - 第4章面向对象方法---UMI
4.1 UML术语表
4.2 UML的模型表达式 - 第5章 面向对象方法------RUP
5.1 RUP的特点
5.2 核心工作流 - 第6章软件测试
6.1 软件测试目标与软件测试过程模型
6.2 软件测试技术
6.3 软件测试步骤 - 第7章 软件生存周期过程与管理
7.1 软件生存周期过程概述
7.2 过程描述
7.3 应用说明
7.4 软件生存周期模型
7.5 过程规划与管理 - 第8章集成化能力成熟度模型(CMMI)
8.1 背景和原理
8.2 CMMI的模型部件
8.3 CMMI的等级
1、软件工程的概念
- "软件危机"现象
20世纪60年代以来,随着计算机的广泛使用,软件生产率、软件质量远远满足不了社会发展的需求,成为社会、经济发展的制约因素,人们通常把这一现象称为"软件危机" - 软件开发的本质
不同抽象层术语之间映射,以及不同抽象层处理逻辑之间的映射。 - 软件的定义
软件是包括程序、数据及其相关文档 的完整集合。其中,程序是按照事先设计的功能和性能要求执行的指令序列;数据是使程序能正常操作信息的数据结构;文档是与程序开发、维护和使用有关的图文材料。
2、软件需求与软件需求规约
- 需求定义及其基本特性
一个需求是有关一个"要予构造"的陈述,描述了待开发产品/系统(或项)功能上的能力、性能参数或其他性质。
对于单一一个需求,必须具有五个基本特性:
(1)必要的,该需求是用户说要求的;
(2)无歧义的,该需求只能用一种方式解释;
(3)可测的,该需求是可以进行测试的;
(4)可跟踪的,该需求可从一个开发阶段跟踪到另一个阶段;
(5)可测量的,该需求是可测量的。 - 需求规约
需求规约一般要满足四个基本特性
(1)重要性和稳定性程度:按需求的重要性和稳定性,对需求进行分级,例如:基本需求、可选需求、期望需求
(2)可修改的:在不过多地影响其他需求的前提下,可以容易地修改一个单一需求。
(3)完整的:没有遗漏的需求。
(4)一致的:不存在互斥的需求。
3、结构化方法
- 表达问题域信息的基本术语及其表示
(1)数据流:在结构化分析方法中,数据流是数据的流动,用于表达在分析中所要使用的、用于表达"客体"的信息。
(2)加工:在结构化分析方法中,加工是数据的变换单位,即它接受输入的数据,对其进行处理,并产生输出。
(3)数据存储:数据存储是数据的静态接口。
(4)数据源和数据潭:数据源是数据流的起点,数据潭是数据流的归宿地。数据源和数据潭是系统之外的实体,可以是人、物或其他软件。它们均用一个矩形表示。 - 表达功能模型的工具------DFD图
DFD图,即数据流图,是表达功能模型的工具。它是一种描述数据变换的图形化工具,其中包含的元素可以是数据流、数据存储、加工、数据源和数据潭等。 - 数据字典、判定表和判定树
(1)在数据字典中,为了使定义的结构数据便于理解和阅读,一般按三种条目来组织,即数据流条目、数据存储数目和数据条目。
(2)判定表:判定表是用以描述加工的一种工具,通常用来描述一些不易用自然语言表达清楚或需要很大篇幅才能表示清楚的加工。
(3)判定树:判定树也是一种描述加工的工具,判定表可以用判定树等价表示。
4、面向对象方法
- UML术语表总述
为了支持抽象分析和设计中的事物,UML给出了八个基本本语即类、接口、协作、用况、主动类、构件、制品、节点。 每个术语都体现着一定的软件设计原理,例如类体现了数据抽象、过程抽象、局部化以及信息隐蔽等原理;用况体现了问题分离、功能抽象等原理;接口体现了功能抽象等。 - UML的4个术语
为了表达各类事物之间的相互依赖和作用,UML给出了4个术语,即关联、泛化、细化和依赖;
(1)关联:关联是对一组有相同结构、相同链的描述,是类目之间的一种结构关系。关联可以用一条连接两个类目的线段表示,并可对其命名,其结构可以具有方向性,用一个实心三角形来指示关联的方向;
(2)泛化:泛化是一般性类目和它的较为特殊类目之间的一种关系。子类可以继承父类的属性和操作,同时,也可以替换父类的声明;
(3)细化:细化是类目之间的语义关系,其中一个类目规约了保证另一个类目执行的契约;
(4)依赖:依赖用于描述一个类目使用另一个类目的信息和服务,是一种使用关系。 - UML术语的作用
(1). 类用于抽象客观事物。
(2). 接口用于抽象事物之间的缝隙。
(3). 协作用于抽象协作性行为。
(4). 用况用于抽象功能。
(5). 主动类用于抽象并发行为。
(6). 构件用于抽象软件解中可标识的成分。
(7). 制品用于抽象工作产品。
(8). 节点用于抽象计算单元。
(9). 关联用于抽象结构关系。
(10). 泛化用于抽象"一般/特殊"关系。
(11). 实现用于抽象精化关系。
(12). 依赖用于抽象使用关系。 - 面向对象方法------RUP
RUP的突出特点
RUP的突出特点是,它是一种以用况为驱动的、以体系结构为中心的迭代、增量式开发 。
(1)以用况为驱动
以用况为驱动是指在系统的生存周期中,以用况作为基础,驱动系统有关人员对所要建立系统的功能需求进行交流,驱动系统分析、设计、实现和测试等活动。
(2)以体系结构为中心
以体系结构为中心是指在系统的生存周期中,开发的任何阶段都要给出相关模型视角下有关体系结构的描述,作为构思、构造、管理和改善系统的主要标准。
(3)迭代、增量式开发
迭代、增量式开发是指通过开发活动的迭代,不断地产生相应的增量。在RUP中,规定了四个开发阶段:初始阶段、精化阶段、构造阶段和移交阶段。
5、软件测试
- 软件测试的定义为:
按照特定规程发现软件错误的过程。其目的是检验它是否满足规定的需求,或清楚了解预期结构与实际结果之间的差异。 - 测试过程模型
软件测试是一个有程序的过程,包括测试设计、测试执行以及测试结果比较 。测试过程模型可分为三类:环境模型、被测对象模型和错误模型。
(1)环境模型 :是对程序运行环境的抽象。程序运行环境又包括支持其运行的硬件、固件和软件,如计算机、终端设备、网卡、操作系统、编译系统、实用程序等。在软件测试过程中,建立环境模型的主要目的是,确定所发现的错误是否为环境造成的。
(2)被测对象模型 :该模型是从测试的角度对程序的抽象。为了测试,必须简化程序,形成被测程序的抽象版本,即对象模型。
(3)错误模型 :该模型是对程序中的错误及其分类的抽象。在软件测试中,往往需要定义"什么是错误"、"什么是一般性错误"、"什么是严重性错误"等,即要给出"错误模型"。
6、软件生存周期过程与管理
-
过程分类
按过程主体把软件生存周期过程分为以下几个过程。
(1)基本过程 :是指那些与软件生产直接相关的活动集。该过程又可分为获取过程、供应过程、开发过程、运行过程和维护过程。
(2)支持过程 :是指有关各方按他们的目标所从事的一系列相关支持活动集。该过程又可分为文档过程、配置管理过程、质量保证过程、验证过程、确认过程、联合评审过程、审计过程和问题解决过程。
(3)组织过程:是指那些与软件生产组织有关的活动集。该过程又可分为设计过程、基础设施过程培训过程和改进过程。
-
软件验证过程 包含两个活动:过程实现和验证。
验证活动有五个任务:需求验证、设计验证、代码验证、集成验证和文档验证个过程可通过过程意图、期望的结果以及达到过程结果所需要执行的活动和任务来描述。
对于一个过程的完整技术上的描述,还应包括:达到过程意图和实现过程结果的方法或规程,以及过程和活动的文档。
-
软件生存周期模型
瀑布模型
增量模型
演化模型
螺旋模型
喷泉模型
-
集成化能力成熟度模型(CMMI)
过程专用目标和共用目标
过程域是一个业务域中一束相关的实践,当它们一起得以实现时,就满足被认为对该过程域的改善具有重要作用的一组条件。
专用目标是用于描述满足该过程域必须呈现的一些独有特征。经可以用于帮助确定一个过程域是否得以满足。
共用目标用于描述产现制度化的该过程必须呈现的特征,仅用于确定一个过程域是否得以满足。
成熟度等级的组成在CMM中,应用于一个组织过程改善的成熟度等级有5个。即1级:初始级;2级:已管理级;3级:已定义级;4级:已定量管理级;5级:持续优化级。
试卷
-
1
-
2、
-
3、