前言,本文章所有内容均摘录自《软件设计师教程(第5版)》
第1章 计算机系统知识
1.1机器字长为n时各种码制表示的带符号数的范围
码制 | 定点整数 | 定点小数 |
---|---|---|
原码 | − ( 2 n − 1 − 1 ) ∼ + ( 2 n − 1 − 1 ) -(2^{n-1}-1)\sim +(2^{n-1}-1) −(2n−1−1)∼+(2n−1−1) | − ( 1 − 2 n − 1 ) ∼ + ( 1 − 2 − ( n − 1 ) ) -(1-2^{n-1})\sim+(1-2^{-(n-1)}) −(1−2n−1)∼+(1−2−(n−1)) |
反码 | − ( 2 n − 1 − 1 ) ∼ + ( 2 n − 1 − 1 ) -(2^{n-1}-1)\sim +(2^{n-1}-1) −(2n−1−1)∼+(2n−1−1) | − ( 1 − 2 n − 1 ) ∼ + ( 1 − 2 − ( n − 1 ) ) -(1-2^{n-1})\sim+(1-2^{-(n-1)}) −(1−2n−1)∼+(1−2−(n−1)) |
补码 | − ( 2 n − 1 ) ∼ + ( 2 n − 1 − 1 ) -(2^{n-1})\sim +(2^{n-1}-1) −(2n−1)∼+(2n−1−1) | − 1 ∼ + ( 1 − 2 − ( n − 1 ) ) -1\sim+(1-2^{-(n-1)}) −1∼+(1−2−(n−1)) |
反码 | − ( 2 n − 1 − 1 ) ∼ + ( 2 n − 1 − 1 ) -(2^{n-1}-1)\sim +(2^{n-1}-1) −(2n−1−1)∼+(2n−1−1) | − 1 ∼ + ( 1 − 2 − ( n − 1 ) ) -1\sim+(1-2^{-(n-1)}) −1∼+(1−2−(n−1)) |
1.2 工业标准IEEE 754
浮点数的表示形式:
(
−
1
)
S
2
E
(
b
0
b
1
b
2
b
3
.
.
.
b
p
−
1
)
(-1)^S2^E(b_0b_1b_2b_3...b_{p-1})
(−1)S2E(b0b1b2b3...bp−1)
- ( − 1 ) S (-1)^S (−1)S为该浮点数的数符,当S为0时表示正数,S为1时表示负数
- E为指数(阶码),用移码表示
- ( b 0 b 1 b 2 b 3 . . . b p − 1 ) (b_0b_1b_2b_3...b_{p-1}) (b0b1b2b3...bp−1)为尾数,其长度为P位,用原码表示
3种形式的IEEE 754浮点数格式
参数 | 单精度浮点数 | 双精度浮点数 | 扩充精度浮点数 |
---|---|---|---|
浮点数字长 | 32 | 64 | 80 |
尾数长度P | 23 | 52 | 64 |
符号位S | 1 | 1 | 1 |
指数长度E | 8 | 11 | 15 |
最大指数 | +127 | +1023 | +16383 |
最小指数 | -126 | -1022 | -16382 |
指数偏移量 | +127 | +1023 | +16383 |
可表示的实数范围 | 1 0 − 38 ∼ 1 0 38 10^{-38}\sim 10^{38} 10−38∼1038 | 1 0 − 308 ∼ 1 0 308 10^{-308}\sim 10^{308} 10−308∼10308 | 1 0 − 4932 ∼ 1 0 4932 10^{-4932}\sim 10^{4932} 10−4932∼104932 |
1.3 海明码
设数据位是n位,校验位是k位,则n和k必须满足以下关系:
2
k
−
1
>
=
n
+
k
2^k-1>=n+k
2k−1>=n+k
1.4 Cache性能分析
设
H
c
H_c
Hc为cache的命中率,
t
c
t_c
tc为Cache的存取时间,
t
m
t_m
tm为主存的访问时间,则Cache存储器的等效加权平均访问时间
t
a
t_a
ta为:
t
a
=
H
c
t
c
+
(
1
−
H
c
)
t
m
=
t
c
+
(
1
−
H
c
)
(
t
m
−
t
c
)
t_a=H_ct_c + (1-H_c)t_m=t_c+(1-H_c)(t_m-t_c)
ta=Hctc+(1−Hc)tm=tc+(1−Hc)(tm−tc)
1.5 磁盘容量计算公式
- 非格式化容量=
面数*(磁道数/面)*内圆周长*最大位密度
,磁盘所能存储的总位数 - 格式化容量=
面数*(磁道数/面)*(扇区数/道)*(字节数/扇区)
,各扇区中数据区容量的总和
1.6 计算机的使用效率
以系统在执行任务的任意时刻能正常工作的概率A来表示,即
A
=
M
T
B
F
M
T
B
F
+
M
T
R
F
A=\frac{MTBF}{MTBF+MTRF}
A=MTBF+MTRFMTBF
- MTBF:平均无故障时间,两次故障之间系统能正常工作的时间的平均值
- MTRF:计算机的维修效率,指从故障发生到机器修复平均所需要的时间
1.7 计算机可靠性模型
- 串联系统。设系统中各个子系统的可靠性分别用
R
1
R_1
R1,
R
2
R_2
R2…
R
N
R_N
RN来表示,则系统的可靠性R可由下式求得:
R = R 1 R 2 . . . R N R=R_1R_2...R_N R=R1R2...RN - 并联系统。设系统中各个子系统的可靠性分别用
R
1
R_1
R1,
R
2
R_2
R2…
R
N
R_N
RN来表示,则系统的可靠性R可由下式求得:
R = 1 − ( 1 − R 1 ) ( 1 − R 2 ) . . . ( 1 − R N ) R=1-(1-R_1)(1-R_2)...(1-R_N) R=1−(1−R1)(1−R2)...(1−RN)
第3章 数据结构
3.1 二叉树的性质
- 二叉树第i层(i>=1)上最多有 2 i − 1 2^{i-1} 2i−1个结点
- 高度为k的二叉树最多有 2 k − 1 2^k-1 2k−1个结点(k>=1)
- 对于任何一棵二叉树,若其终端结点数为 n 0 n_0 n0,度为2的结点数为 n 2 n_2 n2,则 n 0 = n 2 + 1 n_0=n_2+1 n0=n2+1
- 具有n个结点的完全二叉树的深度为[ l o g 2 n + 1 log_2n+1 log2n+1]
3.2 哈希解决冲突方法
开放定址法:
H
i
=
(
H
(
k
e
y
)
+
d
i
)
%
m
i
=
1
,
2
,
.
.
.
,
k
(
k
≤
m
−
1
)
H_i=(H(key)+ d_i) \% m \quad i=1,2,...,k(k \leq m-1)
Hi=(H(key)+di)%mi=1,2,...,k(k≤m−1)
- H(key): 哈希函数
- m: 哈希表表长
- d i d_i di: 增量序列
3.3 各种排序方法的性能比较
排序方法 | 时间复杂度 | 辅助空间 | 稳定性 |
---|---|---|---|
直接插入 | O ( n 2 ) O(n^2) O(n2) | O(1) | 稳定 |
简单选择 | O ( n 2 ) O(n^2) O(n2) | O(1) | 不稳定 |
冒泡排序 | O ( n 2 ) O(n^2) O(n2) | O(1) | 稳定 |
希尔排序 | O ( n 1.3 ) O(n^{1.3}) O(n1.3) | O(1) | 不稳定 |
快速排序 | O ( n log n ) O(n \log n) O(nlogn) | O ( log n ) O( \log n) O(logn) | 不稳定 |
堆排序 | O ( n log n ) O(n \log n) O(nlogn) | O(1) | 不稳定 |
归并排序 | O ( n log n ) O(n \log n) O(nlogn) | O(n) | 稳定 |
基数排序 | O ( d ( n + r d ) ) O(d(n+rd)) O(d(n+rd)) | O(rd) | 稳定 |
第4章 操作系统知识
4.1 作业调度算法
响应比:
R
p
=
作
业
响
应
时
间
作
业
执
行
时
间
R_p=\frac{作业响应时间}{作业执行时间}
Rp=作业执行时间作业响应时间
作业响应时间为作业进入系统后的等候时间与作业的执行时间之和,即
R
p
=
1
+
作
业
响
应
时
间
作
业
执
行
时
间
R_p=1+\frac{作业响应时间}{作业执行时间}
Rp=1+作业执行时间作业响应时间
第5章 软件工程基础知识
5.1 COCOMO估算模型
一种精确的、易于使用的成本估算模型,按详细程度分类:
1)基本COCOMO模型
一个静态单变更模型,用于对整个软件系统进行估算。其公式如下:
E
=
a
(
L
)
b
,
D
=
c
E
d
E=a(L)^b,D=cE^d
E=a(L)b,D=cEd
其中:
- E表示工作量,单位是人月
- L是项目的源代码行估计值,不包括程序中的注释及文档,其单位是千行代码
- a,b,c,d是常数
2)中级COCOMO模型
静态多变更模型,将软件系统模型分为系统和部件两个层次。公式如下:
E
=
a
(
L
)
b
E
A
F
E=a(L)^bEAF
E=a(L)bEAF
- EAF:工作量调节因子
- L:软件产品的目标代码行数,单位是千行代码
- a,b是常数
5.2 Putnam估算模型
一种动态多变量模型,假设在软件开发的整个生存周期中工作量有特定的分布。公式如下:
L
=
C
k
E
1
/
3
t
d
4
/
3
L=C_kE^{1/3}t_d^{4/3}
L=CkE1/3td4/3
- L表示源程序代码行数(LOC)
- t d t_d td表示开发持续时间(年)
- E是包括软件开发和维护在整个生存期所花费的工作量(人年)
- C k C_k Ck表示技术状态常数,其值依赖于开发环境
5.3 McCabe度量法
在一个强连通的有向图G中,环的个数V(G)由下面公式给出:
V
(
G
)
=
m
−
n
+
2
p
V(G)=m-n+2p
V(G)=m−n+2p
- V(G):有向图G中的环路数
- m: 图G中弧的个数
- n: 图G中的结点数
- p: 图G中的强连通分量个数
第8章 算法设计与分析
8.1 一般算法在平均情况下的复杂度分析
T ( n ) = ∑ i = 1 m p i × t i T(n)=\sum_{i=1}^m p_i\times t_i T(n)=∑i=1mpi×ti
- p i p_i pi:第i类输入发生的概率
- t i t_i ti:第i类输入的执行时间,
- 输入分为m类