文章

35

粉丝

0

获赞

0

访问

1.5k

头像
2011年计算机学科专业基础综合试题 - 第42题回答
数据结构
发布于2025年9月11日 17:21
阅读数 31


评分及理由

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

学生给出的基本设计思想是:用一次循环找出A与B中第⌈n/2⌉个大的数,作为中位数。但这种方法实际上是通过合并两个有序数组并取第n小的数(因为总长度为2n,中位数是第n小的数),但代码实现中只循环了n次,且每次比较当前A和B的最小值,取较小的那个,这样实际上是在找两个有序数组合并后的前n个最小数中的最后一个(即第n小的数),这符合中位数的定义。思路正确,但描述不够精确(没有明确说明是合并过程中找第n小的元素)。因此扣1分。得3分。

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

学生代码试图通过一次循环遍历,每次比较A和B当前最小元素,取较小者,并移动指针,循环n次后返回的temp应该是第n小的数(即中位数)。但代码存在逻辑错误:
1. 循环条件为i < n,但循环内每次只取一个元素,这样确实会取到第n小的数(因为循环n次后,a和b指针移动次数之和为n,但实际合并数组的前n个元素并不一定是严格递增的?因为这里没有真正合并,只是模拟取最小)
2. 但是,当a或b指针越界时(即一个数组全部被取完),代码没有处理。例如,如果A数组所有元素都小于B数组,那么当a达到n时,再访问A[a]就会越界。学生代码没有考虑这种情况,因此代码不完整,有严重错误。
3. 另外,中位数应该是第n小的数(因为总长度2n,中位数是第n个),但代码中循环n次后temp确实是第n次选择的数(即第n小的数),这一点正确。
但由于指针越界问题未处理,代码不能正确运行。因此扣5分(逻辑错误严重)。得4分。

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

学生正确分析了时间复杂度为O(n)和空间复杂度为O(1),与标准答案的O(log n)不同,但学生的方法(如果正确实现)确实是O(n)时间,因此这里不扣分。得2分。

题目总分:3+4+2=9分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发