文章

986

粉丝

5

获赞

20

访问

246.4k

头像
2016年(408)计算机学科专业基础综合试题 - 第43题回答
数据结构
发布于2025年12月10日 17:50
阅读数 142


评分及理由

(1)得分及理由(满分4分)

得分:3分

理由:学生作答的基本设计思想与标准答案基本一致,即采用快速选择的思想找到第⌊n/2⌋小的元素,将最小的⌊n/2⌋个元素放入一个子集,其余放入另一个子集,以满足|n1-n2|最小且|S1-S2|最大的要求。但在第一次识别结果中,出现了“⌊ln 12⌋”这样的明显识别错误(应为⌊n/2⌋),且描述中“之前还进行划分”等语句存在语病和冗余。第二次识别结果表述更清晰,但仍有“枢轴之前的元素属于A/B”的表述不够准确(标准答案中根据枢轴位置i与k的比较,决定对哪部分继续划分,并非简单地将枢轴之前的元素归入某一边)。考虑到核心思路正确,但表述存在瑕疵,扣1分。

(2)得分及理由(满分9分)

得分:5分

理由:学生的代码框架模仿了标准答案,使用了快速选择的思路,并设置了类似的循环和指针更新逻辑。但是,代码中存在多处逻辑错误:
1. 变量`k`的初始化错误:`k = n - 2;` 应为 `k = n / 2;`。这是一个关键逻辑错误,直接导致划分目标错误,无法满足题目要求。
2. 快速选择(划分)部分的代码逻辑混乱且错误。在两次识别结果中,内层while循环的代码顺序和条件判断均有问题。例如,出现了重复的`while (low < high && a[high] >= pivotkey) --high;`,以及`while (low < high && a[low] <= pivotkey) ++low;`的重复或顺序错乱。正确的快速选择划分应如标准答案所示,是一个交替从高端找小、从低端找大的过程,学生的代码未能正确实现这一交换逻辑,会导致数组元素丢失或死循环。
3. 代码中未声明变量`i`和`k`的类型(应为`int`)。
由于核心的划分算法逻辑存在严重错误,且划分目标`k`值设置错误,导致算法无法正确工作。但考虑到学生理解了算法的大致框架(如使用low/high指针、枢轴、根据枢轴位置更新搜索范围等),给予一定的分数。扣4分。

(3)得分及理由(满分2分)

得分:2分

理由:学生正确给出了算法的时间复杂度O(n)和空间复杂度O(1),与标准答案一致。不扣分。

题目总分:3+5+2=10分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发