文章
305
粉丝
0
获赞
0
访问
64.7k

评分及理由
(1)得分及理由(满分4分)
得分:2分
理由:学生答案的基本设计思想是“对A进行一次快排,取前⌊n/2⌋的和为S₁,剩下的和为S₂”,这确实能得到满足题目要求(|n₁−n₂|最小且|S₁−S₂|最大)的划分。因为排序后最小的⌊n/2⌋个元素在A₁,其余在A₂,这符合标准答案的核心结论。但是,学生的描述过于简略,没有像标准答案那样详细阐述基于快速选择(或类似快速排序的划分)的递归/迭代过程来高效地找到前⌊n/2⌋个最小元素,而是直接说“进行一次快排”,这意味着对整个数组进行完全排序,效率不是最优。因此,设计思想部分表述不够完整和精准,扣2分。
(2)得分及理由(满分9分)
得分:5分
理由:学生提供的代码实现了完整的快速排序(quicksort函数),然后计算前一半和后一半的和并返回差的绝对值。从功能上看,它能得到正确的结果。但是,题目要求“设计一个尽可能高效的划分算法”,标准答案强调使用类似快速排序的划分思想(即快速选择)来在平均O(n)时间内找到中位数或第⌊n/2⌋小的元素,而不需要完全排序。学生的算法进行了完整的O(n log n)排序,效率低于标准答案的O(n)平均时间复杂度。因此,算法实现没有满足“尽可能高效”的要求。此外,代码中的solution函数返回的是abs(S1-S2),而题目要求是满足划分条件,通常可以返回S2-S1或差值,这一点不影响正确性。快速排序的代码实现基本正确,但存在一个小瑕疵:在第二个内层while循环中,第一次识别结果是“A[i] < temp”,第二次是“A[i] <= temp”,标准快速排序通常使用“<=”以保证稳定性并正确处理相等元素,但这里不影响结果。由于算法整体思路正确但效率不足,扣4分。
(3)得分及理由(满分2分)
得分:2分
理由:学生正确分析了算法的时间复杂度为O(n log₂n)和空间复杂度为O(log₂n)(递归栈深度)。这与他们实现的完整快速排序算法一致,因此给满分。
题目总分:2+5+2=9分
登录后发布评论
暂无评论,来抢沙发