科目组合
计算机: 数据结构 、计算机组成原理 、操作系统 、计算机网络
(1)
距离D可化简为:D = 2 * (max(a,b,c) - min(a,b,c))
枚举a[i],对于每一个a[i],二分找到两侧最近的b,此时得到区间[a,b]或[b,a]
之后再二分第一个大于等于区间左端点的c[j],这样就可以得到选a[i]的最优答案ans = min(ans, D[i])
其中D[i] = min(2 * (max(a,b) - c[i-1]), 2 * (max(a,b,c) - min(a, b)));
(2)
int GetAns(int l, int r, Set<int>S3)
{
int ans = INT_MAX;
auto c = S3.lower_bound(l);
if (c != S3.end()) {
ans = min(ans, 2 * (max(b, *c) - a));
}
if (c != S3.begin()) {
ans = min(ans, 2 * (b - c));
}
return ans;
}
int Solve(vector<int>S1, Set<int>S2, Set<int>S3)
{
int ans = INT_MAX;
for(auto &a : S1) {
auto b = S2.lower_bound(a);
if (b != S2.end()) {
ans = min(ans, GetAns(a, *b, S3));
}
if (b != S2.begin()) {
ans = min(ans, GetAns(*b, a, S3));
}
}
return ans;
}
(3)
时间复杂度O(nlog^2(n))
评分及理由
(1)得分及理由(满分3分)
得分:1分
理由:学生正确指出了距离D的简化形式D=2*(max(a,b,c)-min(a,b,c)),这是正确的数学化简。但是后续的设计思想描述混乱,存在多处逻辑错误:①"二分找到两侧最近的b"表述不清晰;②"二分第一个大于等于区间左端点的c[j]"逻辑不完整;③给出的D[i]计算公式错误。基本设计思想存在严重缺陷,只能给1分。
(2)得分及理由(满分8分)
得分:2分
理由:代码实现存在多处严重问题:①函数参数定义错误(Set
(3)得分及理由(满分2分)
得分:0分
理由:时间复杂度分析错误。学生给出的O(nlog²n)分析基于错误的算法实现,实际上如果按照学生描述的算法思路,时间复杂度应该是O(nlogm logk),但算法本身是错误的,因此时间复杂度分析没有意义。
题目总分:1+2+0=3分
(1)
哈夫曼树
(2)
从根节点出发的同时遍历01串
当前遍历到0,则往左子树移动
否则向右子树移动
直到走到叶节点时解码出一个字符
然后回到哈夫曼树根节点重复上述过程。
(3)
将其01编码按照(2)的规则尝试组成编码哈夫曼树,当左右字符都在叶节点时则具有前缀性质,否则不具有。
评分及理由
(1)得分及理由(满分4分)
学生回答"哈夫曼树",这是正确的数据结构选择。哈夫曼树是前缀编码的典型数据结构实现,字符存储在叶节点,保证了前缀特性。但回答过于简单,没有详细说明为什么哈夫曼树适合保存前缀编码。考虑到问题只要求指出适宜的数据结构,没有要求详细解释,所以给满分4分。
(2)得分及理由(满分3分)
学生详细描述了从根节点出发,根据0/1串选择左右子树,到达叶节点时解码出字符,然后回到根节点重复过程。这与标准答案描述的译码过程完全一致,思路清晰完整。给满分3分。
(3)得分及理由(满分3分)
学生回答"将其01编码按照(2)的规则尝试组成编码哈夫曼树,当左右字符都在叶节点时则具有前缀性质",这个回答基本正确,指出了需要构造二叉树,并且字符应该在叶节点。但表述不够严谨,"左右字符都在叶节点"的表述可能引起歧义。标准答案更准确地指出"字符信息只能存在叶结点中"。考虑到学生抓住了判定前缀特性的核心思想,扣1分。给2分。
题目总分:4+3+2=9分
(1)
乘法可以拆分成一系列加法和右移操作,类似乘法的梯式运算。
(2)
按照规定的顺序使用总线和逻辑部件,避免发生冲突。
(3)
没有乘法指令的最长
使用阵列乘法器实现的最短
阵列乘法器基于硬件优化,提前计算出了需要的结果。
(4)
有符号:00000000 FFFFFFFE
无符号:00000000 FFFFFFFE
umul未溢出,mul未溢出。
高n位非全0时溢出。
评分及理由
(1)得分及理由(满分2分)
学生回答正确,指出乘法可以通过加法和移位实现,类似于梯式运算(即笔算乘法的步骤)。虽然未明确提到编译器转换或Booth乘法等细节,但核心思路正确。得2分。
(2)得分及理由(满分2分)
学生回答不完整且表述模糊。控制逻辑的主要作用是控制循环次数和根据操作表控制加法与移位操作,而学生仅提到“按照规定的顺序使用总线和逻辑部件,避免发生冲突”,未涉及循环控制和具体操作控制。得1分。
(3)得分及理由(满分4分)
学生正确指出没有乘法指令时执行时间最长,阵列乘法器实现时最短,但理由不充分。未说明①需要软件模拟、②需要多个时钟周期、③单周期完成等关键点,仅提到“硬件优化”。得2分。
(4)得分及理由(满分5分)
第一问:学生正确给出有符号和无符号乘法的64位乘积均为00000000FFFFFFFE,得1分。
第二问:学生正确判断umul未溢出,但将imul误写为mul且判断为未溢出(实际应溢出),理由未说明符号位和数值位范围。得1分。
第三问:学生正确指出高n位非全0时溢出,但未强调无符号乘法的溢出条件为高n位不全为0。得1分。
本小题总计得3分。
题目总分:2+1+2+3=8分
(1)
tag占17位
LRU占3位
有修改位
(2)
起始地址为:0000 0000 1000 0000 0000 0000 1100 0000
最后地址为:0000 0000 1000 0000 0001 0000 1100 0000
缺失次数为:64次
(3)
tag为:0000 0000 0000 0001 0H = 2
组号为:0000 0000 0H = 0
块内偏移为:000011H = 3
首先通过组号找到对应的cache组,然后通过比较tag找到对应的cache行:
若cache行存在,则检查有效位是否为1,若有效则直接读取该cache行的数据;
否则需要从主存读入相应的数据,并根据LRU规则替换掉Cache组内的一行。
评分及理由
(1)得分及理由(满分3分)
学生答案中,标记(Tag)位数计算错误(应为20位,学生答17位),LRU位数正确(3位),但修改位判断错误(直写方式无修改位,学生答有修改位)。因此扣2分,得1分。
(2)得分及理由(满分3分)
学生答案中,起始地址和结束地址的二进制表示正确,缺失次数计算结果正确(64次),但未给出详细计算过程。由于结果正确且关键步骤(地址计算)正确,不扣分,得3分。
(3)得分及理由(满分4分)
学生答案中,Tag值计算错误(应为20位全值,学生仅给出部分并转换为十进制),组号和块内偏移计算正确。访问过程描述基本正确,包括组号查找、Tag比较、有效位检查、缺失处理及LRU替换,但Tag计算错误导致过程描述存在逻辑缺陷。扣1分,得3分。
题目总分:1+3+3=7分
semaphore A = 0, B = 0, C = 0, D = 0;
A()
{
...
V(A)
}
B()
{
...
V(B)
}
C()
{
P(A)
P(B)
...
V(C)
}
D()
{
...
V(D)
}
E()
{
P(C)
P(D)
...
}
评分及理由
(1)信号量定义及初值(满分2分)
学生定义了四个信号量A、B、C、D,初值均为0,这与标准答案中为每个同步关系设置信号量的思路不同。但学生使用的信号量数量(4个)与同步关系数量一致,且初值设置正确。这里不扣分,得2分。
(2)进程A、B、D的实现(满分1.5分)
进程A、B、D中直接执行操作后执行V操作,符合无前置依赖的要求。实现正确,得1.5分。
(3)进程C的实现(满分1.5分)
进程C中通过P(A)和P(B)等待A和B完成,然后执行操作并V(C),正确实现了C必须在A和B完成后执行的约束。得1.5分。
(4)进程E的实现(满分2分)
进程E中通过P(C)和P(D)等待C和D完成,正确实现了E必须在C和D完成后执行的约束。得2分。
题目总分:2+1.5+1.5+2=7分
注:虽然学生的信号量命名方式(直接使用任务名)与标准答案(使用关系命名)不同,但逻辑完全正确,且满足题目要求的同步关系,因此不扣分。
(1)
0001 0000 1000 0000 0001
1080 0000H + 1026 * 4B = 1080 0000H + 1010H = 1080 1010H
页目录号为:(0001000010)_2 = 66,页号为:(0000000001)_2 = 1
物理地址为:0020 1000H + 42H = 0020 1042H
a[1][2]页表项的物理地址为:0030 1000H + 1010H = 0030 2010H
(2)
虚拟地址必须连续
物理地址不是必须连续
评分及理由
(1)得分及理由(满分4分)
① 虚拟地址计算:学生计算为1080 1010H,但正确答案应为1080 1008H。计算过程有误(1026×4=4104=1008H,而非1010H),扣1分。
② 页目录号和页号:学生正确识别页目录号66(即42H)和页号1,得1分。
③ 页目录项物理地址:学生计算为0020 1042H,但正确答案应为0020 1108H。错误原因在于未乘以页目录项长度4(应为0020 1000H+4×42H),扣1分。
④ 页表项物理地址:学生计算为0030 2010H,但正确答案应为00301004H。错误原因在于未正确拼接页框号和页内偏移(页框号00301H应左移12位后与页内偏移相加),且计算过程混乱,扣1分。
本小题得分:0分(扣4分)。
(2)得分及理由(满分2分)
① 虚拟地址连续性:学生回答正确(必须连续),得1分。
② 物理地址连续性:学生回答正确(不必连续),得1分。
本小题得分:2分。
(3)得分及理由(满分2分)
学生未作答,扣2分。
本小题得分:0分。
题目总分:0+2+0=2分
(1)
需要在R3和R2的NAT转换表中分别配置H2和Web服务器对应的外网IP和端口号,其中外网IP为对应NAT路由器的IP地址,端口号需要NAT路由器生成
(2)
192.168.1.2、203.10.2.2
203.10.2.6、203.10.2.2
203.10.2.6、192.168.1.2
评分及理由
(1)得分及理由(满分3分)
学生回答需要在R3和R2的NAT转换表中配置H2和Web服务器对应的外网IP和端口号,其中外网IP为对应NAT路由器的IP地址,端口号需要NAT路由器生成。但标准答案明确只需要在R2上配置NAT转换表,且配置的是Web服务器的内网IP地址和默认端口号。学生错误地提到了R3也需要配置NAT,且对NAT转换表的具体配置描述不准确(如未明确指定Web服务器的内网IP和端口号)。因此,该部分回答存在逻辑错误,扣2分,得1分。
(2)得分及理由(满分6分)
学生回答的IP地址序列为:192.168.1.2、203.10.2.2;203.10.2.6、203.10.2.2;203.10.2.6、192.168.1.2。其中,第一组(H2发送P的源IP和目的IP)正确;第二组(经过R3转发后)正确;但第三组(经过R2转发后)的目的IP地址应为192.168.1.2,学生回答正确,但标准答案中第三组是经过R2转发后的地址,学生回答与标准答案一致。因此,该部分回答完全正确,得6分。
题目总分:1+6=7分