科目组合
计算机: 数据结构 、计算机组成原理 、操作系统 、计算机网络
(1)算法的基本设计思想
要判定有向图是否存在唯一拓扑序列,核心思路基于拓扑排序的核心逻辑(Kahn 算法) ,关键在于监控拓扑排序过程中入度为 0 的顶点数量:
拓扑排序的核心原理:拓扑排序要求每次选择入度为 0 的顶点加入序列,删除该顶点及所有出边(对应减少邻接顶点的入度),重复此过程直到所有顶点加入序列(无环)或无入度为 0 的顶点(有环)。
唯一性判定关键:若拓扑排序的每一步都恰好只有 1 个入度为 0 的顶点,则拓扑序列唯一;若存在某一步有 2 个及以上入度为 0 的顶点,说明后续可选路径不唯一,拓扑序列不唯一;若图有环(无法生成包含所有顶点的拓扑序列),则直接返回 0(无有效拓扑序列,更无唯一序列)。
具体步骤设计:
步骤 1:计算所有顶点的入度,存储在入度数组中。
步骤 2:使用队列(或栈)存储初始入度为 0 的顶点,检查初始入度为 0 的顶点数:若为 0(有环)返回 0;若≥2(初始就有多个选择)返回 0。
步骤 3:执行拓扑排序,每次从队列中取出 1 个顶点(因步骤 2 保证初始队列只有 1 个),遍历其所有邻接顶点,减少对应顶点的入度。
步骤 4:每次减少邻接顶点入度后,检查新产生的入度为 0 的顶点数:若≥2,说明当前步骤有多个选择,拓扑序列不唯一,返回 0。
步骤 5:统计拓扑排序中加入序列的顶点数,若不等于总顶点数(有环)返回 0;否则(所有步骤均只有 1 个入度为 0 的顶点)返回 1。
2):
#include <stdio.h>
#include <string.h>
#define MAXV 100 // 假设MAXV为100,可根据实际定义调整
typedef struct {
int numVertices, numEdges;
char verticesList[MAXV];
int Edge[MAXV][MAXV];
} MGraph;
// 判定图G是否存在唯一拓扑序列,是返回1,否则返回0
int uniquely(MGraph G) {
int inDegree[MAXV]; // 存储每个顶点的入度
int queue[MAXV], front = 0, rear = 0; // 队列:存储入度为0的顶点
int count = 0; // 统计拓扑序列中已加入的顶点数
// 步骤1:计算所有顶点的入度
memset(inDegree, 0, sizeof(inDegree));
for (int v = 0; v < G.numVertices; v++) {
for (int u = 0; u < G.numVertices; u++) {
if (G.Edge[u][v] == 1) { // 若u到v有边,则v的入度+1
inDegree[v]++;
}
}
}
// 步骤2:初始化队列,存入所有初始入度为0的顶点
for (int v = 0; v < G.numVertices; v++) {
if (inDegree[v] == 0) {
queue[rear++] = v;
}
}
// 初始入度为0的顶点数≠1 → 序列不唯一或有环
if (rear - front != 1) {
return 0;
}
// 步骤3:执行拓扑排序,监控每一步入度为0的顶点数
while (front < rear) {
// 每次只能取1个顶点(因队列中始终只有1个,保证唯一性)
int u = queue[front++];
count++; // 顶点u加入拓扑序列
int zeroInDegreeCnt = 0; // 记录当前步骤新产生的入度为0的顶点数
// 遍历u的所有邻接顶点v
for (int v = 0; v < G.numVertices; v++) {
if (G.Edge[u][v] == 1) { // u到v有边
inDegree[v]--; // 删除边u→v,v的入度-1
if (inDegree[v] == 0) {
zeroInDegreeCnt++;
queue[rear++] = v; // 新入度为0的顶点入队
}
}
}
// 步骤4:当前步骤产生≥2个入度为0的顶点 → 序列不唯一
if (zeroInDegreeCnt > 1) {
return 0;
}
}
// 步骤5:检查是否所有顶点都加入序列(无环)
// 若count≠顶点数 → 有环,无有效拓扑序列;否则序列唯一
return (count == G.numVertices) ? 1 : 0;
}
评分及理由
(1)得分及理由(满分4分)
得分:4分
理由:学生答案的设计思想完全正确。准确描述了拓扑排序(Kahn算法)的基本原理,并正确指出了判定唯一拓扑序列的关键:在拓扑排序的每一步中,必须恰好只有一个入度为0的顶点。同时考虑了有环情况的处理。思路清晰完整,与标准答案一致。
(2)得分及理由(满分9分)
得分:7分
理由:代码实现基本正确,但存在一个逻辑错误:
题目总分:4+7=11分
111): 0 1 2 3 4 5 6 7 8 9 10
11 14 7 20 9 3 18
HT的装填因子=7/11
2):3,18,14
3):(8*3)%11=2;冲突
(2+1)%11=3,冲突
(2+4)%11=6,冲突
(2+9)%11=0,冲突
(2+16)%11=7,查找失败,所以此时散列地址是7;
评分及理由
(1)得分及理由(满分6分)
学生正确画出了散列表的结构:地址0-10分别对应关键字11、空、14、7、空、20、9、空、空、3、18,与标准答案完全一致。同时正确计算了装填因子为7/11。因此本小题得满分6分。
(2)得分及理由(满分2分)
学生在查找关键字14时给出了比较序列"3,18,14",这与标准答案中依次比较索引9(关键字3)、索引10(关键字18)、索引2(关键字14)的顺序完全一致。因此本小题得满分2分。
(3)得分及理由(满分2分)
学生在查找关键字8时正确计算了初始散列地址2,并按照二次探查法依次计算了地址3、6、0、7,最终在地址7处确认查找失败,与标准答案完全一致。因此本小题得满分2分。
题目总分:6+2+2=10分
1):计算机M最多有32个通用寄存器,shamt字段占5位是应为计算机M字长为32位,而2^5=32,可以移动的位数和计算机字长相同;
2):执行add指令时,控制信号ALUBsrc的取值应该是000,
若rs1和rs2寄存器内容分别是8765 4321H和9876 5432H,则add指令执行后,ALU输出端F、OF和CF的结果分别是:1FDB9753H,OF=1,CF=1
若设add指令处理的是无符号整数,则应根据CF位判断是否有溢出;
3):执行slli指令时,控制信号Ext 的取值可以是0也可以是1是因为slli指令无论经过0扩展还是符号扩展都是扩展0;
4):执行lw指令时,控制信号Ext、ALUctr的取值分别是:1,000
5):一条指令的机器码是A040 A103H,则该指令一定是lw指令因为它14~12为010,6~0为0000011与lw指令相应位对应
6):若执行该指令时,R[01H]=FFFF A2D0H,则所读取数据的存储地址是00009CD4H
评分及理由
(1)得分及理由(满分2分)
学生回答计算机M最多有32个通用寄存器,理由正确(5位可表示32个寄存器),得1分;shamt字段占5位的理由正确(字长32位,移位位数最多31,需要5位表示),得1分。本题得2分。
(2)得分及理由(满分3分)
学生回答ALUBsrc取值应为000,但标准答案为0(控制信号为单比特,000可能表示三位编码,但题目中ALUBsrc应为0或1,此处表述不准确),扣0.5分;F计算结果正确(1FDB9753H),得0.5分;OF和CF结果正确(均为1),各得0.5分;无符号整数溢出判断依据CF正确,得0.5分。本题得2.5分。
(3)得分及理由(满分2分)
学生回答Ext取值可为0或1的理由正确(slli指令立即数高位为0,零扩展和符号扩展结果相同),得2分。
(4)得分及理由(满分2分)
学生回答Ext=1(符号扩展)和ALUctr=000(加法)均正确,各得1分。本题得2分。
(5)得分及理由(满分2分)
学生回答指令机器码A040 A103H一定是lw指令,理由正确(低7位为0000011,对应lw操作码),得2分。
(6)得分及理由(满分2分)
学生回答存储地址为00009CD4H,但标准答案为FFFF 9CD4H(地址计算涉及符号扩展,结果应为32位,学生答案高位错误),扣1分。本题得1分。
题目总分:2+2.5+2+2+2+1=11.5分
1):存放数组a的首地址寄存器编号:r3
变参i:r2;
sum:r1
2):a[i]的地址:0013 E004H,a[i]机器数:FFFFECDC,sum 的机器数:0000 1332H+FFFFECDCH=000000DEH;
a[i]所在页的页号是:0013E,在此次执行中,数据组a至少存放在2页中
3):指令"slli r4, r2, 2"的机器码是:00212213H,若数组a改为short类型,则指令序列存到S中slli指令的汇编形式应是:slli r4, r2, 1
评分及理由
(1)得分及理由(满分3分)
学生答案正确指出了数组a的首地址寄存器为r3(编号03H)、变量i的寄存器为r2(编号02H)、sum的寄存器为r1(编号01H),与标准答案完全一致。因此得3分。
(2)得分及理由(满分5分)
学生答案中:
- a[i]的地址0013 E004H正确;
- a[i]的机器数FFFFECDC有误,正确应为FFFFECDCH(学生少写了一个H,但数值正确,此处不扣分);
- sum的机器数计算错误:0000 1332H + FFFFECDCH = 1 0000 000EH,截断后应为0000 000EH,学生给出的000000DEH是错误的;
- a[i]所在页的页号0013E正确;
- 数据组a至少存放在2页中正确。
由于sum的机器数计算错误,扣1分。因此得4分。
(3)得分及理由(满分2分)
学生答案中:
- 指令"slli r4, r2, 2"的机器码00212213H正确;
- 数组a改为short类型时slli指令的汇编形式slli r4, r2, 1正确。
因此得2分。
题目总分:3+4+2=9分
1):该页表项的虚拟地址和物理地址分别是:(0000 0100 1000)*4+B8C0 0000H=B8C0 0120H,6540 0120H
该页表项中的页框号更新后的值是:2EAH
2):进程Р的页表所在页的页号是:195H,该页对应的页表项的虚拟地址是B8C0 0000+195H*4=B8C0 0654H,该页表项中的页框号是195H
评分及理由
(1)得分及理由(满分3分)
学生正确计算了页表项的虚拟地址为B8C0 0120H和物理地址为6540 0120H,并正确得出页框号为2EAH。计算过程和结果与标准答案一致,得3分。
(2)得分及理由(满分4分)
学生计算页表所在页的页号为195H,但标准答案为2E3H,存在逻辑错误(页号计算错误)。页表项虚拟地址计算基于错误页号,结果为B8C0 0654H(错误)。页框号195H与标准答案一致,但可能为巧合。由于页号计算错误导致后续答案错误,扣2分;页框号正确得1分;本小题总得1分。
题目总分:3+1=4分
1):是临界区,P1和P2要互斥的访问C1;
2): Semaphore empty=1,full=0;//用了表示B中是否存在数据
P1(){
wait(empty);
C1;
signal(full);
};
P2(){
wait(full);
C2;
signal(empty);
}
(3)Semaphore mutex=1//用来互斥访问B
P1(){
wait(mutex);
C3;
signal(mutex);
};
P2(){
wait(mutex);
C3;
signal(mutex);
}
评分及理由
(1)得分及理由(满分2分)
学生回答"是临界区,P1和P2要互斥的访问C1",正确指出了C1需要互斥访问的原因。虽然解释较为简洁,但核心观点正确。得2分。
(2)得分及理由(满分3分)
学生使用了empty和full两个信号量,思路正确且符合题目要求的最少信号量。代码逻辑正确:P1先等待empty再执行C1然后signal(full),P2先等待full再执行C2然后signal(empty)。信号量初值设置正确。得3分。
(3)得分及理由(满分3分)
学生使用了mutex信号量进行互斥,思路正确且符合题目要求的最少信号量。代码逻辑正确:两个进程都通过wait(mutex)和signal(mutex)来互斥访问C3。信号量初值设置正确。得3分。
题目总分:2+3+3=8分
1):,则AS4应选择OSPF
2): 若AS3中的某主机向本自治系统另一主机发送 1 个 IP 分组,为确保该 IP 分组能正常接收,则该 IP 分组的初始TTL值应至少16
3):,至少需:60s
4):由BGP外部会话完成;通过RIP报文;通过BGP内部会话
5):R14下一跳:R11,R15下一跳:R13
评分及理由
(1)得分及理由(满分1分)
学生答案正确选择了OSPF协议。理由:AS4规模较大,可能超过20跳,RIP有15跳限制,而OSPF适合大规模网络。得1分。
(2)得分及理由(满分1分)
学生答案正确设置为16。理由:AS3内通信不超过15个路由器,TTL初始值至少为16(经过15个路由器后TTL=1,仍可到达目的主机)。得1分。
(3)得分及理由(满分2分)
学生答案正确给出60s。理由:RIP每隔30s交换距离向量,从R14开始传播到所有路由器需要两次交换(第一次到邻居,第二次到其他路由器),共60s。得2分。
(4)得分及理由(满分3分)
学生答案部分正确:
- "BGP外部会话"正确,R44和R13属于不同AS,使用eBGP。得1分。
- "通过RIP报文"错误,应通过BGP的UPDATE报文通告路由,RIP是内部网关协议,不用于BGP路由通告。扣1分。
- "通过BGP内部会话"正确,R13、R14、R15在同一AS内,使用iBGP。得1分。
本小题得2分。
(5)得分及理由(满分2分)
学生答案正确:R14下一跳R11,R15下一跳R13。理由:在无策略约束下,BGP选择AS路径最短的路由,R11路径AS路径长度2(AS2 AS8 AS19),R13路径AS路径长度2(AS4 AS10 AS19),R12路径AS路径长度3。R14选择R11,R15选择R13。得2分。
题目总分:1+1+2+2+2=8分