)
【空间复杂度】
算法执行过程中的空间开销。
【二者关系】
虽然算法中常常会以牺牲空间的方式来换取时间效率,但一般认为二者没有必然关系。
第二课数据结构的概念
数据结构的定义
数据结构是指计算机组织、存储数据的方式。
数据结构可分为逻辑结构和存储结构。
其中:
1.逻辑结构又分为线性结构和非线性结构。
2.存储结构又分为顺序存储结构和链式存储结构
逻辑结构
逻辑结构不关心数据如何存储,只关心数据的组织方式。
逻辑结构可分为线性结构和非线性结构。
典型线性结构:
栈、队列
典型非线性结构:
树(二叉树)、网状图
存储结构
存储结构不关心数据如何组织,只关心数据的存储方式。
存储结构又分为顺序存储结构和链式存储结构。
【顺序存储结构】
1.所有元素在内存中按顺序排列
2.查找、修改比较方便
3.插入、删除比较不方便
【链式存储结构】
1.所有元素在内存中随机分布
2.插入、删除比较不方便
3.查找、修改比较方便
4.由于要存储下一元素的地址,所以需要更多的存储空间
【二者关系】
二者没有必然关系。
第三课栈
基本概念
1.栈属于逻辑结构的概念,属于线性结构。
2.栈既可以用顺序存储结构实现,也可以用链式存储结构实现。
3.栈的特点是先进后出(FILO)。
4.进出过程中,栈底指针不变,栈顶指针移动。
计算规则
视栈顶和栈底指针的指向规则而定。
一般的,栈底指向首元素的前一位置(比如0),栈顶指针指向尾元素(比如5),即栈中1、2、3、4、5各存储了一个数据。
此时:
栈中元素个数=栈顶指针-栈底指针(比如5-0=5)
第四课队列
基本概念
1.队列属于逻辑结构的概念,属于线性结构。
2.队列既可以用顺序存储结构实现,也可以用链式存储结构实现。
3.栈的特点是先进先出(FIFO)。
4.队头负责出队,队尾负责入队。
循环队列
循环队列是专门针对顺序存储结构空间固定的特点而设计的,所以一般认为循环队列是顺序存储结构。
其核心原理是:
当队尾到达队列最大位置、而队头不在最小位置时如果继续入队,则队尾移至队列最小位置,从头开始移动,形成循环。
出队时同理。
计算规则
视栈顶和栈底指针的指向规则而定。
一般的,队头指向首元素的前一位置,队尾指针指向尾元素。
假设队列容量为20:
1.若队尾>队头(比如队尾为7,队头为2):
队列元素个数=队尾指针-队头指针(7-2=5)
2.若队头>队尾(比如队尾为2,队头为7):
队列元素个数=队尾指针-队头指针+队列容量(2-7+20=15)
其中,第二种情况只有循环队列中才会出现。
第五课二叉树的计算
基本概念
1.一个二叉树只有一个根节点。
2.在二叉树中,任何一个节点最多只能有2个子节点。
3.一个节点有几个子节点,则度为几。
度为0的节点称为叶子节点。
常用公式
1.第n层的节点数最多为2^(n-1)个。
2.层数为n的二叉树,总节点数最多为2^n-1个。
3.叶子节点数=度为2的节点数+1
4.二叉树节点总数=度为2的节点数+度为1的节点数+叶子节点数
第六课二叉树的遍历
遍历规则
先序遍历:
父节点、左子树、右子树
中序遍历:
左子树、父节点、右子树
后序遍历:
左子树、右子树、父节点
其中左右子树按此规则继续拆分,拆分过程中也按其对应规则遍历,直到不能再拆分为止。
第七课查找算法
顺序查找
其算法复杂度为O(n),长度为n的线性表,最多需要n次才能找到指定元素。
顺序查找最大/最小值
长度为n的线性表,所有元素随机排列,最多需要n-1次才能找到最大/最小值。
二分查找
其算法复杂度为O(logn),长度为n的线性表,最多需要logn次就能找到指定元素。
二分查找使用条件
1.使用顺序存储结构(如数组)。
2.所有元素按序排列。
第八课排序算法
按原理分类
交换类:
冒泡排序、快速排序
选择类:
简单选择排序、堆排序
插入类:
简单插入排序、希尔排序
按稳定性分类
稳定:
冒泡排序、简单插入排序……
不稳定(快选希堆):
快速排序、简单选择排序、希尔排序、堆排序
按算法复杂度
O(n^2):
冒泡排序、简单选择排序、简单插入排序
O(nlogn):
快速排序、堆排序、希尔排序
在一般情况下,快速排序是已知常用算法中效率最高的。
在最坏情况下,快速排序的算法复杂度是O(n^)2。
第二章软件工程
第一课软件工程的算法
基本概念
软件主要包括:
程序、数据、文档。
软件按用途可分为系统软件、支撑软件、应用软件。
系统软件:
电脑操作系统、手机操作系统、数据库管理系统(DBMS)
应用软件:
大众应用软件、数据库应用软件
软件危机
钱不够:
成本不断增高、成本无法控制、成本无法满足需求增长、预算管理失控
时间不够:
生产效率越来越低、进度无法控制、生产率的提高赶不上硬件和需求的发展
质量不够:
质量难以保证、软件不可维护、软件可维护程度极低
软件工程三要素
方法:
为软件开发提供了“如何做”的技术。
工具:
为软件工程方法提供了自动的或半自动的软件支撑环境。
过程:
将软件工程的方法和工具综合起来以达到合理、及时地进行计算机软件开发的目的。
它支持软件开发的各个环节的控制和管理。
第二课需求分析
基本概念
可行性研究主要考虑:
经济、技术、法律。
需求分析阶段最重要的文档:
《软件需求规格说明书》。
《软件需求规格说明书》的任务是统一认识,所以必须追求准确,消灭歧义。
数据流图(DFD)
箭头:
数据流
圆形、椭圆形:
数据的加工
方框:
系统和环境的接口
半开口的方框、双杠:
数据的存储文件
数据字典
1.是数据流图的重要补充
2.应该包含数据流图中提到的所有数据
第三课软件设计
概要设计
耦合性:
模块之间的关联程度
内聚性:
模块内部的关联程度
设计原则:
高内聚低耦合
软件系统结构图:
深度、宽度、扇入、扇出。
详细设计
【程序流程图】
箭头:
控制流
矩形:
执行步骤
菱形:
逻辑条件
【N-S图】
【PAD图】
第四课结构化程序设计
基本原则
自顶向下、逐步求精、模块化
使用3种基本控制结构,限制goto语句的使用
3种控制结构
顺序结构、选择结构、循环结构
第五课面向对象程序设计
基本概念
对象是类的实例。
类由两个部分组成:
属性、方法。
由同一个类定义的对象,拥有相同的属性和方法
类的特征
封装型、继承性、多态性
第六课测试与调试
基本概念
测试:
发现错误
调试:
诊断并改正错误
注意:
没有一种方法可以保证软件没有错误
黑盒和白盒
【黑盒】
根据软件的外部功能设计测试用例
例如:
等价类划分、边界值分析、错误推测法
【白盒】
根据软件的内部逻辑设计测试用例
例如:
基本路径覆盖测试、逻辑条件覆盖测试
测试流程
单元测试:
对单一模块进行测试
集成测试:
对模块间的协作进行测试
确认测试:
对《软件需求规格说明书》的需求进行逐一确认
系统测试:
对安全、性能等系统指标进行测试
回归测试:
对调试后的代码重新进行测试
第三章数据库系统
第一课数据库系统的概念
基本概念
数据(Data):
信息的载体。
包括类型和值两个属性。
数据库(DB):
依照某种数据模型将数据组织并存放起来的集合。
数据库管理系统(DBMS):
系统软件,是数据库系统的核心,为数据库提供底层服务。
数据库管理系统(DBAS):
基于数据库管理系统设计的应用软件,面向普通用户使用。
数据库管理员(DBA):
负责数据库设计、维护、性能、安全等工作的高科技人才。
数据库系统(DBS):
包括以上所有概念,再加上其他相关软硬件环境的总和。
数据语言
数据定义语言:
表的建立、修改和删除
数据操纵语言:
表中数据的增加、删除、修改和查询
数据控制语言:
负责表中的安全性和完整性的设置
发展阶段
人工管理阶段->文件管理阶段->数据库管理阶段
数据库管理阶段主要解决的问题:
数据共享。
独立性
逻辑独立性:
逻辑结构修改时,应用程序不需要修改。
物理独立性:
物理结构修改时,应用程序不需要修改。
三级模式
概念模式(逻辑模式):
数据库逻辑结构的全局描述
外模式(子模式):
用户能看到的数据库逻辑结构和描述
内模式(物理模式):
数据库的物理存储结构和存取方法
第二课E-R模型
基本概念
E(Entity):
实体
R(RelationShip):
联系
一对一:
学生和学号、中国公民和身份证、考生和准考证号……
一对多:
班长和班级、宿舍和学生……
多对多:
学生和课程、老师和课程……
图示
实体:
矩形
联系:
菱形
属性:
椭圆形
第三课关系模型
基本概念
层次模型:
用“树”的方式组织数据
网状模型:
用“图”的方式组织数据
关系模型:
用“二维表”的方式组织数据
【关系模型】属性、元组
【关系数据库】字段、记录
元组的分量是关系模型中的最小不可再分单位
数据完整性
候选键(候选关键字):
可以标识记录唯一性的几个字段。
主键(主关键字):
可以标识记录唯一性的一个字段。
一个表只能有一个主关键字。
外键(外部关键字):
如果当前表中某字段是其他表的主键,则称此字段为外键。
实体完整性:
主键和候选键不能为空。
参照完整性:
对一对多关系中父表和子表之间关系的制约。
自定义完整性:
其他设置。
如域完整性,就是对字段取值范围进行设置。
第四课关系代数(上)
基本概念
【交】
计算前提:
两个关系的属性完全相同
属性规则:
属性保持不变。
元组规则:
对两个关系中的元组求交集。
【并】
计算前提:
两个关系的属性完全相同
属性规则:
属性保持不变。
元组规则:
对两个关系中的元组求并集。
【差】R-S=T
计算前提:
两个关系的属性完全相同
属性规则:
属性保持不变。
元组规则:
表示取R中存在且S中不存在的元组形成结果T。
【笛卡儿积】RxS=T
计算前提:
对属性无要求
属性规则:
对两个关系的属性求并集。
元组规则:
对两个关系的元组做全排列。
【除】R/S=T
计算前提:
S的属性应是R的子集
属性规则:
取R中存在的属性而S中不存在的属性作为结果T的属性,即对属性做差运算。
元组规则:
在R中选择与各属性值完全相等的元组,将其对T中的属性做投影。
第五课关系代数(下)
基本概念
【选择】
规则:
按照指定规则,对元组进行筛选,属性不变。
【投影】
规则:
按照指定规则,对属性进行筛选,元组不变。
【连接】
前提:
两个关系中有一个公共属性
规则:
先做笛卡儿积,然后根据连接条件对结果做选择。
连接条件根据公共属性设计。
【自然连接】RxS=T
前提:
两个关系中有一个公共属性
规则:
1.做笛卡儿积,2.将公共属性值相等的记录留下,3.将两个公共属性合并为一个
第六课数据库的设计
生命周期
【需求分析】
数据流图、数据字典、需求规格说明书
【概念设计】
设计E-R模型
【逻辑设计】
将E-R模型转换为数据模型(主要是关系模型)
【物理设计】
将关系模型转换为关系数据库