文章

278

粉丝

1

获赞

100

访问

53.4k

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


评分及理由

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

学生答案描述了使用小根堆来查找最小的10个数的算法思想:先建堆,然后重复取堆顶(最小元素)并调整堆。这个思路是可行的,但存在一个关键问题:题目要求查找最小的10个数,而学生描述的方法是“依次重复10次”取堆顶。这种方法确实能得到最小的10个数,但它是通过10次删除堆顶元素(每次删除后调整堆)来实现的。然而,标准答案中更优的方法是使用一个大小为10的大根堆来维护当前最小的10个数,只需遍历一次数组。学生的算法虽然正确,但平均比较次数并非最优(建堆O(n) + 10次调整O(log n)),且题目要求“平均情况下的比较次数尽可能少”,学生的算法在n很大时(n>100000)比标准答案的O(n)方法(如大小为10的堆或插入方法)效率低,因为它改变了原数组(或需要额外空间存储取出的元素)。考虑到学生思路正确但非最优,且题目要求“简单描述其算法思想”,扣1分。得4分。

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

学生分析了时间复杂度:第一次识别结果为O(n),第二次识别结果为klog₂n(k=10)。实际上,建堆时间复杂度为O(n),取10次堆顶并调整的时间复杂度为O(10 log n) = O(log n)(因为10是常数),总时间复杂度为O(n + log n) = O(n)。学生的第二次识别结果“klog₂n”忽略了建堆的O(n),但第一次识别结果正确为O(n)。空间复杂度学生正确给出O(1)。由于时间复杂度分析基本正确(以第一次识别为准),且空间复杂度正确,不扣分。得5分。

题目总分:4+5=9分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发