软件设计师笔记最终版Word文件下载.docx
- 文档编号:19911820
- 上传时间:2023-01-12
- 格式:DOCX
- 页数:63
- 大小:3.30MB
软件设计师笔记最终版Word文件下载.docx
《软件设计师笔记最终版Word文件下载.docx》由会员分享,可在线阅读,更多相关《软件设计师笔记最终版Word文件下载.docx(63页珍藏版)》请在冰豆网上搜索。
若它的左子树非空,则左子树上所有节点的值均小于它的根节点的值
若它的右子树非空,则右子树上所有结点的值均大于等于它的根节点的值
它的左、右子树也分别为二叉排序树。
查找的时候,中序遍历二叉树,得到一个递增序列
关键字最大的结点可以有左子树,但一定没有右子树
哈夫曼树(最优二叉树)
定义
是带权路径(WPL)最短的树,权值越大的叶子节点越靠近根节点。
构造哈夫曼树及WPL计算
例题
已知一个文件中出现的各字符及其对应的频率如下表所示。
若采用定长编码,则该文件中字符的码长应为()。
若采用Huffman编码,则字符序列“face”的编码应为()。
A.2
B.3
C.4
D.5
A.110001001101
B.001110110011
C.101000010100
.010*********
解析:
所谓定长编码是指用多少位二进制足够表示字符,图中字符是有6个的,a、b、c、d、e、f,可用000到101表示a到f,这样编码字符的码长可以为3,4位当然也是可以,但我们是找最合适的,自然3位能满足要求。
第二问,哈夫曼树的左节点未必要比右节点小,但是通常做题时需要写成左小右大的形式,再左0右1赋值,所谓“face”编码,是指找到这4个字母,从根节点出发,要经历的编码数。
如下图所示,所以答案为BA
平衡二叉树
平衡二叉树(BalandBinaryTree)又被称为AVL树(有别于AVL算法),且具有以下性质:
它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
满二叉树
除最后一层无任何子节点外,每一层上的所有结点都有两个子结点或0个子节点的二叉树。
查找方法
二分查找法(折半查找法)
适用情况
不经常变动而查找频繁的有序列表
优点
1、比较次数少
2、查找速度快
3、平均性能好
缺点
1、要求待查表为有序表
2、插入删除困难
实现算法
首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;
否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。
重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
分块查找
节点动态变化的情况
比顺序查找算法(就是一个一个的去比较)快得多
速度不如折半查找法
把一个大的线性表分解成若干块,每块中的节点可以任意存放,但块与块之间必须排序。
假设是按关键码值非递减的,那么这种块与块之间必须满足已排序要求,实际上就是对于任意的i,第i块中的所有节点的关键码值都必须小于第i+1块中的所有节点的关键码值。
此外,还要建立一个索引表,把每块中的最大关键码值作为索引表的关键码值,按块的顺序存放到一个辅助数组中,显然这个辅助数组是按关键码值费递减排序的。
查找时,首先在索引表中进行查找,确定要找的节点所在的块。
由于索引表是排序的,因此,对索引表的查找可以采用顺序查找或折半查找;
然后,在相应的块中采用顺序查找,即可找到对应的节点。
平均查找长度(E(n))
假设某个线性表中共有n个节点,分成大小相等的b块,每块有s=n/b,则
排序
直接插入排序
每一趟将一个待排序的记录,按照其关键字的大小插入到有序队列的合适位置里,直到全部插入完成,比如斗地主抽牌就是这样的规则。
简单选择排序
每趟从待排序的记录中选出关键字最小的记录,顺序放在已排序的记录序列末尾,直到全部排序结束为止。
冒泡排序
两两比较待排序的关键字,并交换不满足次序要求的那对数,直到整个表都满足次序要求为止。
希尔排序
把记录按步长gap分组,对每组记录采用直接插入排序方法进行排序。
随着步长逐渐减小,所分成的组包含的记录越来越多,当步长的值减小到1时,整个数据合成为一组,构成一组有序记录,则完成排序。
快速排序
通过一趟排序将要排序的数据分割成独立的两部分:
分割点左边都是比它小的数,右边都是比它大的数。
然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
采用了分治法的算法策略。
堆排序
堆排序中堆的定义:
n个元素的序列{k1,k2,…,kn}当且仅当满足下列关系时,称为堆。
或
归并排序
将待排序序列R[0...n-1]看成是n个长度为1的有序序列,将相邻的有序表成对归并,得到n/2个长度为2的有序表;
将这些有序序列再次归并,得到n/4个长度为4的有序序列;
如此反复进行下去,最后得到一个长度为n的有序序列。
基数排序
基数排序与本系列前面讲解的七种排序方法都不同,它不需要比较关键字的大小。
它是根据关键字中各位的值,通过对排序的N个元素进行若干趟“分配”与“收集”来实现排序的。
设有一个初始序列为:
R{50,123,543,187,49,30,0,2,11,100}。
我们知道,任何一个阿拉伯数,它的各个位数上的基数都是以0~9来表示的。
所以我们不妨把0~9视为10个桶。
我们先根据序列的个位数的数字来进行分类,将其分到指定的桶中。
R[0]=50,个位数上是0,将这个数存入编号为0的桶中。
分类后,我们在从各个桶中,将这些数按照从编号0到编号9的顺序依次将所有数取出来。
这时,得到的序列就是个位数上呈递增趋势的序列。
按照个位数排序:
{50,30,0,100,11,2,123,543,187,49}。
排序的比较
排序方法
最好时间复杂度
平均时间复杂度
最坏时间复杂度
辅助空间
稳定性
直接插入
O(n)
O(n2)
O
(1)
稳定
简单选择
不稳定
不存在
O(n1.3)
O(n
)
O(
O(d(n+rd))
O(rd)
堆是一种数据结构,(34)是堆排序
A.(10,
50,
80,
30,
60,
20,
15,
18)
B.(10,18,15,20,50,80,30,60)
C.(10,15,18,50,80,30,60,20)
D.(10,30,60,20,15,18,50,80)
根据定义可知选B
广义表
广义表的长度是将最外面那层的括号删了以后所剩下的元素(组)个数,深度是括号的层数
L1=((a,(a,b),((a,b),c))),L2=((1,2,3)),L3=(1,2,3)。
求L1、L2、L3的长度和深度
答案:
长度
深度
L1
1
4
L2
2
L3
3
归并排序的归并路数
归并路数=|logkm|,其中m为元素个数,k为多路归并趟数
若对27个元素只进行三趟多路归并排序,则选取的归并路数为(37)。
A.2B.3C.4D.5
根据公式可得log以3为底,以27为真数的答案为3。
所以选B
表达式的记法
前缀表达式(前缀记法、波兰式)
从右至左扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(栈顶元素op次顶元素),并将结果入栈;
重复上述过程直到表达式最左端,最后运算得出的值即为表达式的结果。
例如前缀表达式“-×
+3456”:
(1)从右至左扫描,将6、5、4、3压入堆栈;
(2)遇到+运算符,因此弹出3和4(3为栈顶元素,4为次顶元素,注意与后缀表达式做比较),计算出3+4的值,得7,再将7入栈;
(3)接下来是×
运算符,因此弹出7和5,计算出7×
5=35,将35入栈;
(4)最后是-运算符,计算出35-6的值,即29,由此得出最终结果。
中缀表达式
我们平常用的表达式a+b-c这样的就是中缀表达式
后缀表达式(后缀记法、逆波兰式)
从左至右扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(次顶元素op栈顶元素),并将结果入栈;
重复上述过程直到表达式最右端,最后运算得出的值即为表达式的结果。
例如后缀表达式“34+5×
6-”:
(1)从左至右扫描,将3和4压入堆栈;
(2)遇到+运算符,因此弹出4和3(4为栈顶元素,3为次顶元素,注意与前缀表达式做比较),计算出3+4的值,得7,再将7入栈;
(3)将5入栈;
(4)接下来是×
运算符,因此弹出5和7,计算出7×
(5)将6入栈;
(6)最后是-运算符,计算出35-6的值,即29,由此得出最终结果。
系统基础
符号数
原码
正数的原码等于自身的二进制数,负数的原码第一位为1(符号位,表示负数),后面为自身的二进制数
反码
正数的反码等于自身的二进制数,负数的反码符号位不动,其余各位按位取反
补码
正数的补码等于自身的二进制数,负数的补码是在反码的基础上+1
移码(增码)
无论正负数,只要将其补码的符号位取反即可
符号数的应用
在计算机中,最适合数字加减运算的数字编码是补码,最适合表示浮点数阶码的数字编码是移码。
定点数
所谓定点数,就是小数点的位置固定不变的数。
小数点的位置通常有两种约定形式:
定点整数(纯整数,小数点在最低有效数值位之后)和定点小数(纯小数,小数点在最高有效数值位之前)。
机器字长为n时各种码制表示的带符号数的范围
码制
定点整数
定点小数
[-(2n-1-1),2n-1-1]
[-(1-2-(n-1)),1-2-(n-1)]
[-2n-1,2n-1-1]
[-1,1-2-(n-1)]
移码
记忆技巧
当A=2n-1,B=1-2-(n-1)时,则有以下规律
[-(A-1),A-1]
[-B,B]
[-A,A-1]
[-1,B]
计算机指令系统
立即寻址:
操作数包含在指令中,获取操作数是最快的
直接寻址:
操作数的地址在指令中
寄存器寻址:
操作数在寄存器中
寄存器间接寻址:
操作数的地址在寄存器中
中央处理器
CPU的组成
运算器、控制器、寄存器和内部总线,其中控制器不仅要保证程序的正确执行,而且要能够处理异常事件。
存储系统
存储器的分类
按位置分类
内存(主存)、外存(辅存)
按材料分类
磁存储器、半导体存储器、光存储器
按工作方式分类
读写存储器、只读存储器
按访问方式分类
按地址访问的存储器、按内容访问的存储器(相联存储器)
按寻址方式分类
随机存储器、顺序存储器、直接存储器
软件测试
测试阶段划分
单元测试(模块测试)
一般是在编程阶段完成,由程序员对自己编写的模块自行测试,检查模块是否实现了详细设计说明书中规定的功能和算法,通常使用白盒测试。
单元测试计划应该在详细设计阶段制定。
单元测试期间着重从:
模块接口、局部数据结构、重要的执行通路、出错处理、边界条件这几个方面对模块进行测试。
集成测试(组装测试)
主要目标是发现模块间的接口和通信问题。
集成测试主要发现概要设计阶段产生的错误,通常采用黑盒测试。
集成测试计划应该在概要设计阶段制定。
集成的方式可分为非增殖式和增殖式。
确认测试
检查软件的功能、性能和其他特征是否与用户的需求一致。
它是以需求规格说明书作为依据的测试,通常采用黑盒测试。
软件确认测试首先要进行有效性测试以及软件配置审查,然后进行验收测试。
确认测试一般有以下三个步骤:
(1)有效性测试
(2)软件配置审查
(3)验收测试
α测试与β测试(当一个软件是作为产品被许多客户使用时需要用这种测试)
系统测试
系统测试的任务是把软件放在实际的硬件和网络环境中进行测试,主要测试软件的非功能需求和质量属性是否得到满足。
系统测试是根据系统方案说明书来设计测试用例,通常采用黑盒测试。
常见的系统测试有:
恢复测试、安全性测试、强度测试、性能测试、可靠性测试和安装测试。
在已确认的计算机软硬件环境下,通过与系统需求对比,发现系统与用户需求不符或矛盾的地方。
回归测试
在软件发生变更后进行的测试,以发现变更时引起的其他错误
白盒测试
语句覆盖
使被测程序中的每条语句至少执行一次
判定覆盖(分支覆盖)
使被测程序中的每个判定表达式至少获得一次“真”值和“假”值
条件覆盖
使被测程序中的每个逻辑条件的各种可能的值至少满足一次
判定/条件覆盖
使得判定中的每个条件的“真”值和“假”值至少出现一次,并使本身判定结果的“真”值和“假”值至少出现一次
条件组合覆盖
使得每个判定中条件的各种可能值的组合都至少出现一次。
满足条件组合覆盖的测试用例是一定满足判定覆盖、条件覆盖和判定/条件覆盖的
路径覆盖
覆盖被测试程序中所有可能的路径
面向对象测试
以下四个层次由低到高的顺序排列
(1)测试与对象关联的单个操作,即算法层。
(2)测试单个对象类,类层。
(3)测试对象集群,模板层
(4)测试面向对象系统,系统层。
编译原理
校验码
奇偶校验
通常用于对少量数据的校验
奇校验
将信息数据的各位进行模二加法并作为校验码的称为奇校验。
偶校验
将信息数据的各位进行模二加法并取反作为校验码的称为偶校验。
海明码
采用多位校验码的方式,可以发现、纠正错误。
数据位和校验位必须满足关系式:
2校验位-1≥数据位+校验位。
码距至少是3。
循环冗余校验码
检错能力非常强,但是不能纠错。
编码长度(CRC字长)为数据位+校验位
文法
终结符和非终结符
文法格式通常为:
ɑ→β,若字符为大写字母,则是非终结符,若字符为小写字母,则是终结符
文法的分类
0型文法(短语文法)
设G=(VN,VT,P,S),如果它的每个产生式α→β是这样一种结构:
α∈(VN∪VT)*且至少含有一个非终结符,而β∈(VN∪VT)*,则G是一个0型文法。
一个非常重要的理论结果是:
0型文法的能力相当于图灵机(Turing)。
或者说,任何0型文语言都是递归可枚举的,反之,递归可枚举集必定是一个0型语言。
0型文法是这几类文法中,限制最少的一个,所以我们在试题中见到的,至少是0型文法。
1型文法(上下文有关文法)
此文法对应于线性有界自动机。
它是在0型文法的基础上每一个α→β,都有|β|>
=|α|。
这里的|β|表示的是β的长度。
注意:
虽然要求|β|>
=|α|,但有一特例:
α→ε也满足1型文法。
如有A->
Ba则|β|=2,|α|=1符合1型文法要求。
反之,如aA->
a,则不符合1型文法。
2型文法(上下文无关文法)
此文法对应于下推自动机。
2型文法是在1型文法的基础上,再满足:
每一个α→β都有α是非终结符。
如A->
Ba,符合2型文法要求。
大多数程序设计语言的语法规则可以用上下文无关文法描述
如Ab->
Bab虽然符合1型文法要求,但不符合2型文法要求,因为其α=Ab,而Ab不是一个非终结符。
3型文法(正规文法)
此文法对应于有限状态自动机。
它是在2型文法的基础上满足:
A→α|αB(右线性)或A→α|Bα(左线性)。
如有:
A->
a,A->
aB,B->
a,B->
cB,则符合3型文法的要求。
但如果推导为:
ab,A->
cB或推导为:
Ba,B->
cB则不符合3型方法的要求了。
具体的说,例子A->
cB中的A->
ab不符合3型文法的定义,如果把后面的ab,改成“一个非终结符+一个终结符”的形式(即为aB)就对了。
例子A->
cB中如果把B->
cB改为B->
Bc的形式就对了,因为A→α|αB(右线性)和A→α|Bα(左线性)两套规则不能同时出现在一个语法中,只能完全满足其中的一个,才能算3型文法。
数据流图(DataFlowDiagram,DFD)
在面向数据流的设计方法中,一般把数据流图中的数据流划分为两种类型,一种是变换流,一种是事务流。
DFD由数据流、加工、数据存储和外部实体4个要素构成。
编译过程
词法分析
从左到右逐个字符地扫描,从中识别出一个个“单词”符号。
“单词”符号是程序设计语言的基本语法单位,如关键字、标识符、常数、运算符和分隔符等。
语法分析
根据语言的语法规则将单词符号序列分解成各类语法单位,比如表达式、语句和程序等。
语法规则就是各类语法单位的构成规则。
通过语法分析确定整个输入串是否构成一个语法上正确的程序。
语义分析
检查源程序是否包含静态语义错误,并收集类型信息供后面的代码生成阶段使用。
只有语法和语义都正确的源程序才能被翻译成正确的目标代码。
语义分析的一个主要工作是进行类型分析和检查。
程序语言中的一个数据类型一般包含两个方面的内容:
类型的载体及其上的运算。
整除取余运算只能对整型数据进行运算,若其运算对象中有浮点数就认为是类型不匹配的错误。
静态的语义错误是指编译程序可以发现,动态的语义错误是指源程序虽然能够被编译和执行,但是结果不对,一般是逻辑上的错误。
进程
进程的三态图
进程的五态图
PV操作
进入临界区时执行P操作(申请),退出临界区时执行V操作(释放)
操作系统
内存编址
已知主存容量为16MB,且按①,求该主存地址至少需要多少位
当①的内容为“字节编址”时
字节编址就是8位的意思,所以16MB=(16*1024)KB=(16*1024*1024)byte=24*210*210=224byte.所以需要24位
当①的内容为“4位编址”时
先将编址方式凑成8位,即2*4位,相应的主存容量也扩充2倍为32MB,所以32MB=(32*1024)KB=(32*1024*1024)byte=25*210*210=225byte.所以需要25位
若内存按字节编址,用存储容量为32K×
8比特的存储器芯片构成地址编号A0000H~DFFFFH的内存空间,则至少需要______片。
1、A.4B.6C.8D.10
空间大小为DFFFF-A0000+1=262144byte=256kb。
组成内存储器的芯片数量=内存储器的容量/单个芯片的容量=(256kb*8b)/(32k*8b)=8,所以选C
指令运行参数
设定变量T为指令运行总时间,t为所需时间最长部分指令的时间(周期),n为指令条数
指令相关公式
顺序方式运行指令所需时间:
T*n
流水方式运行指令所需时间:
T+(n-1)t
重叠方式运行指令所需时间:
(n+2)*t
吞吐率:
n/流水方式运行指令所需时间
效率:
效率=吞吐率*t
加速比:
加速比=效率*n
若指令流水线把一条指令分为取指、分析和执行三部分,且三部分的时间分别是2ns,2ns,1ns,则100条指令全部执行完毕所需的时间是多少ns
答:
因为指令运行时间=T+(n-1)t,所以(2+2+1)+(100-1)*2=203。
注意,若选择题中没有相应的选择,则将每段指令所需时间均设置为最长时间,就本题而言,应该是2ns,2ns,2ns。
(因为目前对于指令运行时间的算法没有统一)
若每一条指令都可以分解为取指、分析和执行三步。
已知取指时间t取指=5Δt,分析时间t分析=2Δt,执行时间t执行=5Δt。
如果按顺序方式从头到尾执行完500条指令需_____Δt。
如果按照[执行]k、分析k+1、[取指]k+2重叠的流水线方式执行指令,从头到尾执行完500条指令需_____Δt。
4、A.5590B.5595C.6000D.6007
5、A.2492B.2500C.2510D.2515
第一个空符合顺序方式,则时间为T*n=12*500=6000,第二个空符合重叠的流水线方式,则时间为(n+2)*t=(500+2)*5=2510,所以选C,C
某指令流水线由5段组成,各段所需要的时间如下图所示。
连续输入10条指令时的吞吐率为_____
。
6、A.10/70Δt
B.10/49Δt
C.10/35Δt
D.10/30Δt
吞吐率=n/T+(n-1)t=10/((1+3+1+2+1)+9*3)=10/35Δt,所
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件 设计师 笔记 最终版
![提示](https://static.bdocx.com/images/bang_tan.gif)