中级软件设计师 第四部分(二)
读前须知: 【软考篇】中级软件设计师 学前须知
上一章节: 【软考篇】中级软件设计师 第四部分(一)
下一章节: 【软考篇】中级软件设计师 第四部分(三)
三十一. 数据结构
最难知识点之一,只提供概念需要自行深入了解
31.1 线性结构
线性结构: 一个出度,一个入度。分顺序存储和链式存储。
链式存储: 单链表、循环链表、双向链表
性能 | 指标 | 顺序 | 链式 |
---|---|---|---|
空间 | 存储密度 | =1 | <1 |
空间 | 容量分配 | 事先确定 | 动态改变 |
时间 | 查找运算 | O(n/2) | O(n/2) |
时间 | 读运算 | O(1) | O([n+1/2]),最好O(1),最坏O(n) |
时间 | 插入运算 | O(n/2) | O(1) |
时间 | 删除运算 | O([n-1/2]) | O(1) |
队列: 先进先出,分队头和队尾。
栈: 先进后出,只有栈顶能进出。
循环队列: head:头指针,tail:尾指针
(1)队空条件:head=tail
(2)队满条件:(tail + 1)% size = head
(3)长度:(tail - head)% size
串: 分空串,空格串,子串。
31.2 数组
数组: 定长线性表在维度上的扩展
特点: 数据元素数目固定,数据元素类型相同,数据元素的下标关系具有上下界的约束且下标有序,一般不做修改,使用于顺序结构。
31.4 矩阵
矩阵 |
---|
对称矩阵 |
对角矩阵 |
三角矩阵 |
稀疏矩阵 |
31.5 树
树 |
---|
二叉树 |
满二叉树 |
完全二叉树 |
线索二叉树 |
最优二叉树 |
哈夫曼树 |
查找二叉树 |
平衡二叉树 |
31.5 图
图 |
---|
无向图 |
有向图 |
完全图 |
无向完全图 |
有向完全图 |
三十二. 算法
最难知识点之一,只提供概念需要自行深入了解
算法: 对特定问题求解步骤的一种描述,是指令的有限序列,其中每一条指令表示一个或多个操作。
复杂度: 时间复杂度,空间复杂度。
时间度量: O(1) < O(log2n) < O(n) < O(nlog2n) < O(n^2) < O(n^3) < O(2n)
类别 | 排序方法 | 平均时间复杂度 | 最坏时间复杂度 | 空间复杂度(辅助空间) | 稳定性 |
---|---|---|---|---|---|
插入 | 直接插入 | O(n^2) | O(n^2) | O(1) | 稳定 |
插入 | Shell插入 | O(n^1.3) | O(n^2) | O(1) | 不稳定 |
选择 | 直接选择 | O(n^2) | O(n^2) | O(1) | 不稳定 |
选择 | 堆排序 | O(nlog2n) | O(nlog2n) | O(1) | 不稳定 |
交换 | 冒泡排序 | O(n^2) | O(n^2) | O(1) | 稳定 |
交换 | 快速排序 | O(nlog2n) | O(n^2) | O(nlog2n) | 不稳定 |
- | 归并排序 | O(nlog2n) | O(nlog2n) | O(n) | 稳定 |
- | 基数排序 | O(d(r+n)) | O(d(r+n)) | O(r+n) | 稳定 |
算法 |
---|
分治法(快速,归并) |
回溯法(一般用于迷宫类问题) |
动态规划法(最优解) |
贪心法(局部最优) |
0-1背包 |
部分背包 |
分支限界法 |
概率算法(四类) |
近似算法 |
数据挖掘算法 |
三十三. 软件工程
理论知识最多,提供考察点概念,需多刷题
33.1 软件过程
CMM: (1)初始级(2)可重复级(3)可定义级(4)已管理级(5)优化级
CMMI: 结合多个已有的CMM
阶段式模型:
(1)初始的(过程不可预测且缺乏控制)
(2)已管理的(过程为项目服务)
(3)可定义的(过程为组织服务)
(4)定量管理的(过程已度量和控制)
(5)优化的(集中于过程改进)
连续型模型: 关注每个过程域的能力,一个组织对不同的过程域可以达到不同的过程域能力级。
33.2 统一过程UP
开发四阶段
(1)初始(立项)
(2)精华(需求分析)
(3)构建(编码)
(4)移交(维护、测试)
33.3 软件过程模型
软件过程模型: 软件开发模型,是软件开发全部活动和任务的结构框架。
软件过程模型 | 描述 |
---|---|
瀑布模型 | 只适用于需求明确或二次开发(需求稳定) |
V模型 | 瀑布模型的变体,增加了很多轮测试且贯穿于软件开发的各个阶段 |
原型模型 | 快速原型开发,针对需求不明确的情况,一般为了演示。 |
螺旋模型 | 多种模型混合,与原型类似,但增加了风险分析,适合大型项目 |
增量模型 | 先开发核心,用户确认,在开发次核心。每一次增量版本都可作为独立可操作的作品 |
喷泉模型 | 适合面向对象的开发方法 |
33.4 软件开发方法
软件开发方法: 结构化,jackson,原型,面向对象
结构化设计: 体系结构设计,数据设计,接口设计,过程设计
33.5 敏捷开发
敏捷开发: 针对中小项目,为程序员减负,去掉不必要的会议和文档。
自适应开发,水晶方法,特征驱动开发,SCRUM,极限编程
四大价值,五大原则,12个最佳实践,基本原则,开发宣言
33.6 软件项目管理
有效的项目管理集中在: 人员,项目,产品,过程。
成本估算: 自顶向下,自底向上,差别估算,专家估算
规模估算:
(1) COCOMO模型(代码评估)
①基本:静态单变量
①中间:基本的基础上,产品,硬件,人员,项目等
①基本:中间的基础上,分析,设计
(2)COCOMOⅡ模型(COCOMO模型的升级)
①应用组装模型:前期阶段
①早期设计阶段模型:需求稳定且体系建立
①体系结构阶段模型:构建过程
33.7 进度管理
基本原则: 划分,相互依赖,时间分配,工作量确定,确认责任,明确输出结果,确定里程碑
Gantt图: 反应活动并行关系,无法反应依赖及关键路径
**PERT图:**与Gantt相反
33.7 关键路径
知识点复杂,但考点有技巧型,建议简单了解一波
概念: 最早开始时间ES,最早完成时间EF,关键路径,最晚完成时间LF,最晚开始时间LS,松弛时间
33.8 软件项目的组织
组织: 项目型,职能型,矩阵型
程序设计小组
(1)主程序员制: 有个大佬,适合大型项目
(2)民主制: 地位平等,适合小型项目
(3)层次式: 一组长配多个高级程序员,一高级程序员配多个中低级程序员
33.8.1 软件质量管理
软件质量管理: ISO/IEC9126软件质量模型:质量特征和子特性
功能性 | 可靠性 | 易使用性 | 效率性 | 可维护性 | 可移植性 |
---|---|---|---|---|---|
适合性 | 成熟性 | 易理解性 | 时间特性 | 易分析性 | 适应性 |
准确性 | 容错性 | 易学性 | 资源特性 | 易改变性 | 易安装性 |
互用性 | 易恢复性 | 易操作性 | 稳定性 | 一致性 | |
依从性 | 易测试性 | 易替换性 | |||
安全性 |
33.9 软件度量
McCabe度量法: 环路复杂度
有向边:m,节点:n,复杂度:m-n+2