2014-01
下列程序段的时间复杂度是_。
count = 0;
for (k = 1; k <= n; k *= 2)
for (j = 1; j <= n; j++)
count++;A. O(log2 n)
B. O(n)
C. O(nlog2 n)
D. O(n2)
答案:C
2014 全国硕士研究生入学统一考试
当前显示 47 道题
下列程序段的时间复杂度是_。
count = 0;
for (k = 1; k <= n; k *= 2)
for (j = 1; j <= n; j++)
count++;A. O(log2 n)
B. O(n)
C. O(nlog2 n)
D. O(n2)
答案:C
假设栈初始为空,将中缀表达式 a/b+(c*d-e*f)/g 转换为等价的后缀表达式的过程中,当扫描到 f 时,栈中的元素依次是_。
A. +(*-
B. +(-*
C. /+(*-*
D. /+-*
答案:B
循环队列放在一维数组 A[0…M-1]中,end1 指向队头元素,end2 指向队尾元素的后一个位置。假设队列两端均可进行入队和出队操作,队列中最多能容纳 M-1 个元素。初始时为空。下列判断队空和队满的条件中,正确的是_。
A. 队空: end1 == end2; 队满:end1 == (end2 + 1) mod M
B. 队空: end1 == end2; 队满:end2 == (end1 + 1) mod (M-1)
C. 队空: end2 == (end1 + 1) mod M; 队满:end1 == (end2 + 1) mod M
D. 队空: end1 == (end2 + 1) mod M; 队满:end2 == (end1 + 1) mod (M-1)
答案:A
若对如下的二叉树进行中序线索化,则结点 x 的左、右线索指向的结点分别是_。

A. e、c
B. e、a
C. d、c
D. b、a
答案:D
将森林 F 转换为对应的二叉树 T,F 中叶结点的个数等于_。
A. T 中叶结点的个数
B. T 中度为 1 的结点个数
C. T 中左孩子指针为空的结点个数
D. T 中右孩子指针为空的结点个数
答案:C
5 个字符有如下 4 种编码方案,不是前缀编码的是_。
A. 01, 0000, 0001, 001, 1
B. 011, 000, 001, 010, 1
C. 000, 001, 010, 011, 100
D. 0, 100, 110, 1110, 1100
答案:D
对如下所示的有向图进行拓扑排序,得到的拓扑序列可能是_。

A. 3,1,2,4,5,6
B. 3,1,2,4,6,5
C. 3,1,4,2,5,6
D. 3,1,4,2,6,5
答案:D
用哈希(散列)方法处理冲突(碰撞)时可能出现堆积(聚集)现象。下列选项中,会受堆积现象直接影响的是。
A. 存储效率
B. 散列函数
C. 装填(装载)因子
D. 平均查找长度
答案:D
在一棵具有15个关键字的4阶B树中,含关键字的结点个数最多是。
A. 5
B. 6
C. 10
D. 15
答案:D
用希尔排序方法对一个数据序列进行排序时,若第1趟排序结果为9,1,4,13,7,8,20,23,15,则该趟排序采用的增量(间隔)可能是。
A. 2
B. 3
C. 4
D. 5
答案:B
下列选项中,不可能是快速排序第2趟排序结果的是。
A. 2,3,5,4,6,7,9
B. 2,7,5,6,4,3,9
C. 3,2,5,4,7,6,9
D. 4,2,3,5,7,6,9
答案:C
程序P在机器M上的执行时间是20秒,编译优化后,P执行的指令数减少到原来的70%,而CPI增加到原来的1.2倍,则P在M上的执行时间是。
A. 8.4秒
B. 11.7秒
C. 14秒
D. 16.8秒
答案:D
若x=103,y=-25,则下列表达式采用8位定点补码运算实现时,会发生溢出的是。
A. x+y
B. -x+y
C. x-y
D. -x-y
答案:C
float型数据常用IEEE754单精度浮点格式表示。假设两个float型变量x和y分别存放在32位寄存器f1和f2中,若(f1)=CC900000H,(f2)=B0C00000H,则x和y之间的关系为。
A. x<y且符号相同
B. x<y且符号不同
C. x>y且符号相同
D. x>y且符号不同
答案:A
某容量为256MB的存储器由若干4M×8位的DRAM芯片构成,该DRAM芯片的地址引脚和数据引脚总数是。
A. 19
B. 22
C. 30
D. 36
答案:A
采用指令Cache与数据Cache分离的主要目的是。
A. 降低Cache的缺失损失
B. 提高Cache的命中率
C. 降低CPU平均访存时间
D. 减少指令流水线资源冲突
答案:D
某计算机有16个通用寄存器,采用32位定长指令字,操作码字段(含寻址方式位)为8位,Store指令的源操作数和目的操作数分别采用寄存器直接寻址和基址寻址方式。若基址寄存器可使用任一通用寄存器,且偏移量用补码表示,则Store指令中偏移量的取值范围是。
A. -32768~+32767
B. -32767~+32768
C. -65536~+65535
D. -65535~+65536
答案:A
某计算机采用微程序控制器,共有32条指令,公共的取指令微程序包含2条微指令,各指令对应的微程序平均由4条微指令组成,采用断定法(下地址字段法)确定下条微指令地址,则微指令中下地址字段的位数至少是__。
A. 5
B. 6
C. 8
D. 9
答案:C
某同步总线采用数据线和地址线复用方式,其中地址/数据线有32根,总线时钟频率为66MHz,每个时钟周期传送两次数据(上升沿和下降沿各传送一次数据),该总线的最大数据传输率(总线带宽)是___。
A. 132MB/s
B. 264MB/s
C. 528MB/s
D. 1056MB/s
答案:C
一次总线事务中,主设备只需给出一个首地址,从设备就能从首地址开始的若干连续单元读出或写入多个数据。这种总线事务方式称为___。
A. 并行传输
B. 串行传输
C. 突发传输
D. 同步传输
答案:C
下列有关I/O接口的叙述中,错误的是___。
A. 状态端口和控制端口可以合用同一个寄存器
B. I/O接口中CPU可访问的寄存器称为I/O端口
C. 采用独立编址方式时,I/O端口地址和主存地址可能相同
D. 采用统一编址方式时,CPU不能用访存指令访问I/O端口
答案:D
若某设备中断请求的响应和处理时间为100ns,每400ns发出一次中断请求,中断响应所允许的最长延迟时间为50ns,则在该设备持续工作过程中,CPU用于该设备的I/O时间占整个CPU时间的百分比至少是___。
A. 12.5%
B. 25%
C. 37.5%
D. 50%
答案:B
下列调度算法中,不可能导致饥饿现象的是___。
A. 时间片轮转
B. 静态优先数调度
C. 非抢占式短作业优先
D. 抢占式短作业优先
答案:A
某系统有n台互斥使用的同类设备,三个并发进程分别需要3、4、5台设备,可确保系统不发生死锁的设备数n最小为___。
A. 9
B. 10
C. 11
D. 12
答案:B
下列指令中,不能在用户态执行的是___。
A. trap指令
B. 跳转指令
C. 压栈指令
D. 关中断指令
答案:D
一个进程的读磁盘操作完成后,操作系统针对该进程必做的是___。
A. 修改进程状态为就绪态
B. 降低进程优先级
C. 给进程分配用户内存空间
D. 增加进程时间片大小
答案:A
现有一个容量为10GB的磁盘分区,磁盘空间以簇(Cluster)为单位进行分配,簇的大小为4KB,若采用位示图法管理该分区的空闲空间,即用一位(bit)标识一个簇是否被分配,则存放该位图所需簇的个数为___。
A. 80
B. 320
C. 80K
D. 320K
答案:A
下列措施中,能加快虚实地址转换的是___。
I. 增大块表(TLB)容量 II. 让页表常驻内存 III. 增大交换区(swap)
A. 仅I
B. 仅II
C. 仅I、II
D. 仅II、III
答案:C
在一个文件被用户进程首次打开的过程中,操作系统需要做的是___。
A. 将文件内容读到内存中
B. 将文件控制块读到内存中
C. 修改文件控制块中的读写权限
D. 将文件的数据缓冲区首指针返回给用户进程
答案:B
在页式虚拟存储管理系统中,采用某些页面置换算法,会出现 Belady 异常现象,即进程的缺页次数会随着分配给该进程的页框个数的增加而增加。下列算法中,可能出现 Belady 异常现象的是__。
I. LRU 算法
II. FIFO 算法
III. OPT 算法
A. 仅II
B. 仅I、II
C. 仅I、III
D. 仅II、III
答案:A
下列关于管道(Pipe)通信的叙述中,正确的是__。
A. 一个管道可实现双向数据传输
B. 管道的容量仅受磁盘容量大小限制
C. 进程对管道进行读操作和写操作都可能被阻塞
D. 一个管道只能有一个读进程或一个写进程对其操作
答案:C
下列选项中,属于多级页表优点的是__。
A. 加快地址变换速度
B. 减少缺页中断次数
C. 减少页表项所占字节数
D. 减少页表所占的连续内存空间
答案:D
在 OSI 参考模型中,直接为会话层提供服务的是__。
A. 应用层
B. 表示层
C. 传输层
D. 网络层
答案:C
某以太网拓扑及交换机当前转发表如下图所示,主机 00-e1-d5-00-23-a1 向主机 00-e1-d5-00-23-c1 发送1个数据帧,主机00-e1-d5-00-23-c1收到该帧后,向主机00-e1-d5-00-23-a1 发送 1个确认帧,交换机对这两个帧的转发端口分别是__。

A. {3}和{1}
B. {2, 3}和{1}
C. {2, 3}和{1, 2}
D. {1, 2, 3}和{1}
答案:B
下列因素中,不会影响信道数据传输速率的是__。
A. 信噪比
B. 频率宽带
C. 调制速率
D. 信号传播速度
答案:D
主机甲与主机乙之间使用后退 N 帧协议(GBN)传输数据,甲的发送窗口尺寸为 1000,数据帧长为 1000 字节,信道带宽为 100Mbps,乙每收到一个数据帧立即利用一个短帧(忽略其传输延迟)进行确认,若甲、乙之间的单向传播延迟是 50ms,则甲可以达到的最大平均数据传输速率约为__。
A. 10Mbps
B. 20Mbps
C. 80Mbps
D. 100Mbps
答案:C
站点 A、B、C 通过 CDMA 共享链路,A、B、C 的码片序列(chipping sequence)分别是 (1,1,1,1)、(1,-1,1,-1)和(1,1,-1,-1)。若 C 从链路上收到的序列是(2,0,2,0,0,-2,0,-2,0, 2,0,2),则 C 收到 A 发送的数据是__。
A. 000
B. 101
C. 110
D. 111
答案:B
主机甲和主机乙已建立了 TCP 连接,甲始终以 MSS = 1KB 大小的段发送数据,并一直有数据发送;乙每收到一个数据段都会发出一个接收窗口为 10KB 的确认段。若甲在 t 时刻发生超时拥塞窗口为 8KB,则从 t 时刻起,不再发生超时的情况下,经过 10 个 RTT 后,甲的发送窗口是__。
A. 10KB
B. 12KB
C. 14KB
D. 15KB
答案:A
下列关于 UDP 协议的叙述中,正确的是__。
I. 提供无连接服务
II. 提供复用/分用服务
III. 通过差错校验,保障可靠数据传输
A. 仅I
B. 仅I、II
C. 仅II、III
D. I、II、III
答案:B
使用浏览器访问某大学Web网站主页时,不可能使用到的协议是。
A. PPP
B. ARP
C. UDP
D. SMTP
答案:D
二叉树的带权路径长度(WPL)是二叉树中所有叶结点的带权路径长度之和。给定一棵二叉树T,采用二叉链表存储,结点结构如下:

其中叶结点的weight域保存该结点的非负权值。设root为指向T的根结点的指针,请设计求T的WPL的算法,要求:
1)给出算法的基本设计思想。
2)使用C或C++语言,给出二叉树结点的数据类型定义。
3)根据设计思想,采用C或C++语言描述算法,关键之处给出注释。
【答案】
(1)算法基本设计思想
方法一:基于先序递归遍历。定义递归函数,将当前结点的深度作为参数传递。若结点为叶子结点,则累加 深度 * 权值 到结果;否则,递归遍历其左右子树,并将深度参数加1。
方法二:基于层次遍历(BFS)。使用队列实现层次遍历,并记录当前层数 deep。利用指针 lastNode 标记当前层最后一个结点。当遍历到叶子结点时,累加 deep * 权值。每当处理完 lastNode 结点,就更新 lastNode 为下一层的最后一个结点,并将 deep 加1。
(2)二叉树结点的数据类型定义(C语言)
typedef struct BiTNode {
int weight; // 存储权值
struct BiTNode *lchild, *rchild; // 左、右孩子指针
} BiTNode, *BiTree;(3)算法描述(C语言)
方法一:先序递归
int wpl_PreOrder(BiTree root, int deep);
int wpl_LevelOrder(BiTree root);
int WPL(BiTree root) {
return wpl_PreOrder(root, 0); // 基于先序遍历
// 如需使用层次遍历,可改为:return wpl_LevelOrder(root);
}
int wpl_PreOrder(BiTree root, int deep) {
if (root == NULL) return 0; // 空树返回0
if (root->lchild == NULL && root->rchild == NULL)
return deep * root->weight;
return wpl_PreOrder(root->lchild, deep + 1)
+ wpl_PreOrder(root->rchild, deep + 1);
}方法二:层次遍历
int wpl_LevelOrder(BiTree root) {
BiTree q[MaxSize]; // 声明队列,end1为头指针,end2为尾指针
int end1, end2 = 0;
end1 = end2 = 0;
int wpl = 0, deep = 0;
BiTree lastNode;
BiTree newlastNode;
lastNode = root;
newlastNode = NULL;
q[end2++] = root;
while (end1 != end2) {
BiTree t = q[end1++];
if (t->lchild == NULL && t->rchild == NULL) {
wpl += deep * t->weight;
}
if (t->lchild != NULL) {
q[end2++] = t->lchild;
newlastNode = t->lchild;
}
if (t->rchild != NULL) {
q[end2++] = t->rchild;
newlastNode = t->rchild;
}
if (t == lastNode) {
lastNode = newlastNode;
deep += 1;
}
}
return wpl; // 返回wpl
}某网络中的路由器运行OSPF路由协议,题42表是路由器R1维护的主要链路状态信息(LSI),题42图是根据题42表及R1的接口名构造出来的网络拓扑。

请回答下列问题。
1)本题中的网络可抽象为数据结构中的哪种逻辑结构?
2)针对题42表中的内容,设计合理的链式存储结构,以保存题42表中的链路状态信息(LSI)。要求给出链式存储结构的数据类型定义,并画出对应题42表的链式存储结构示意图(示意图中可仅以ID标识结点)。
3)按照迪杰斯特拉(Dijkstra)算法的策略,依次给出R1到达题42图中子网192.1.x.x的最短路径及费用。
(1)本题中的网络可抽象为数据结构中的图(具体为无向图)。
(2)采用带表头结点的链式存储。每个表头结点保存路由器 ID,并指向该路由器的链路/网络信息链;弧结点用 Flag 区分 Link 和 Net 两种记录。数据类型可定义为:
typedef struct {
unsigned int ID, IP;
} LinkNode; // Link的结构
typedef struct {
unsigned int Prefix, Mask;
} NetNode; // Net的结构
typedef struct Node {
int Flag; // Flag=1为Link,Flag=2为Net
union {
LinkNode Lnode;
NetNode Nnode;
} LinkORNet;
unsigned int Metric;
struct Node *next;
} ArcNode; // 弧结点
typedef struct HNode {
unsigned int RouterID;
ArcNode *LN_link;
struct HNode *next;
} HNODE; // 表头结点例如,R1 的表头结点保存 Router ID 10.1.1.1,其信息链依次记录到 R2 的 Link、到 R3 的 Link 以及直连网络 192.1.1.0/24 的 Net;其他路由器按同样方式组织。这样既能表示题表中的全部 LSI,也与题图中的无向图相对应。
(3)从R1到各目的网络的最短路径及代价如下表所示:
| 目的网络 | 路径 | 代价(费用) |
|---|---|---|
| 192.1.1.0/24 | 直接到达 | 1 |
| 192.1.5.0/24 | R1-R3-192.1.5.0/24 | 3 |
| 192.1.6.0/24 | R1-R2-192.1.6.0/24 | 4 |
| 192.1.7.0/24 | R1-R2-R4-192.1.7.0/24 | 8 |
请根据题 42 描述的网络,继续回答下列问题。
1)假设路由表结构如下表所示,请给出题 42 图中 R1 的路由表,要求包括到达题 42 图中子网 192.1.x.x 的路由,且路由表中的路由项尽可能少。

2)当主机 192.1.1.130 向主机 192.1.7.211 发送一个 TTL = 64 的 IP 分组时,R1 通过哪个接口转发该 IP 分组?主机 192.1.7.211 收到的 IP 分组 TTL 是多少?
3)若 R1 增加一条 Metric 为 10 的链路连接 Internet,则题 42 表中 R1 的 LSI 需要增加哪些信息?
(1)R1的路由表如下:
| 目的网络 | 下一跳 | 接口 |
|---|---|---|
| 192.1.1.0/24 | 直连 | E0 |
| 192.1.6.0/23 | 10.1.1.2 | L0 |
| 192.1.5.0/24 | 10.1.1.10 | L1 |
(2)R1通过L0接口转发该IP分组。主机192.1.7.211收到的IP分组TTL是61。
(3)需要增加:前缀Prefix为0.0.0.0/0,Metric为10。
某程序中有如下循环代码段 P:for(int i = 0; i < N; i++) sum+=A[i];。假设编译时变量 sum 和 i 分别分配在寄存器 R1 和 R2 中。常量 N 在寄存器 R6 中,数组 A 的首地址在寄存器 R3 中。程序段 P 起始地址为 08048100H,对应的汇编代码和机器代码如下表所示。

执行上述代码的计算机 M 采用 32 位定长指令字,其中分支指令 bne 采用如下格式:

OP 为操作码;Rs 和 Rd 为寄存器编号;OFFSET 为偏移量,用补码表示。请回答下列问题,并说明理由。
1)M 的存储器编址单位是什么?
2)已知 sll 指令实现左移功能,数组 A 中每个元素占多少位?
3)表中 bne 指令的 OFFSET 字段的值是多少?已知 bne 指令采用相对寻址方式,当前 PC 内容为 bne 指令地址,通过分析表中指令地址和 bne 指令内容,推断出 bne 指令的转移目标地址计算公式。
4)若 M 采用如下“按序发射、按序完成”的 5 级指令流水线:IF(取指)、ID(译码及取数)、EXE(执行)、MEM(访存)、WB(写回寄存器),且硬件不采取任何转发措施,分支指令的执行均引起 3 个时钟周期的阻塞,则 P 中哪些指令的执行会由于数据相关而发生流水线阻塞?哪条指令的执行会发生控制冒险?为什么指令 1 的执行不会因为与指令 5 的数据相关而发生阻塞?
字节编址。
理由:采用32位定长指令字(4字节),表中指令地址间隔为4个地址单位,因此每个地址单位代表1字节。
32位(或4字节)。
理由:sll指令左移两位等价于乘以4,表示数组元素地址间隔为4字节,结合字节编址可知每个元素占4字节。
理由:执行bne时PC自动加4,目标地址与当前PC+4的差值为-24,OFFSET为-6,故每个偏移单位对应4字节。
(指令2依赖指令1,指令3依赖指令2,指令4依赖指令3,指令6依赖指令5)
假设对于 44 题中的计算机 M 和程序 P 的机器代码,M 采用页式虚拟存储管理;P 开始执行时,(R1) = (R2) = 0,(R6) = 1000,其机器代码已调入主存但不在 Cache 中;数组 A 未调入主存,且所有数组元素在同一页,并存储在磁盘同一个扇区。请回答下列问题并说明理由。
1)P 执行结束时,R2 的内容是多少?
2)M 的指令 Cache 和数据 Cache 分离。若指令 Cache 共有16行,Cache 和主存交换的块大小为32字节,则其数据区的容量是多少?若仅考虑程序段 P 的执行,则指令 Cache 的命中率为多少?
3)P 在执行过程中,哪条指令的执行可能发生溢出异常?哪条指令的执行可能产生缺页异常?对于数组 A 的访问,需要读磁盘和 TLB 至少各多少次?
(1) i的值为1000。
(2) 指令Cache的命中率为99.98%。
(3) 可能产生溢出异常的指令是指令4(加法指令);可能产生缺页异常的指令是指令3(访存指令);程序访盘一次;访问TLB的次数为1001次。
文件 F 由 200 条记录组成,记录从 1 开始编号。用户打开文件后,欲将内存中的一条记录插入到文件 F 中,作为其第 30 条记录。请回答下列问题,并说明理由。
(1)连续分配方式
(2)链接分配方式
系统中有多个生产者进程和多个消费者进程,共享一个能存放 1000 件产品的环形缓冲区(初始为空)。当缓冲区未满时,生产者进程可以放入其生产的一件产品,否则等待;当缓冲区未空时,消费者进程可以从缓冲区取走一件产品,否则等待。要求一个消费者进程从缓冲区连续取出 10 件产品后,其他消费者进程才可以取产品。请使用信号量 P,V(或 wait(),signal())操作实现进程间的互斥与同步,要求写出完整的过程,并说明所用信号量的含义和初值。
mutex1:用于控制一个消费者进程连续取出10件产品的互斥,初值为1。mutex2:用于进程单次互斥访问缓冲区,初值为1。empty:表示缓冲区中的空位数量,初值为1000。full:表示缓冲区中的产品数量,初值为0。producer() {
while (1) {
生产一个产品;
P(empty); // 等待空位
P(mutex2); // 互斥访问缓冲区
把产品放入缓冲区;
V(mutex2); // 释放缓冲区访问权
V(full); // 产品数加1
}
}consumer() {
while (1) {
P(mutex1); // 确保连续取10次产品期间独占
for (int i = 0; i < 10; i++) {
P(full); // 等待产品
P(mutex2); // 互斥访问缓冲区
从缓冲区取出一件产品;
V(mutex2); // 释放缓冲区访问权
V(empty); // 空位数加1
消费这件产品;
}
V(mutex1); // 释放连续取产品的控制权
}
}