文章
278
粉丝
1
获赞
100
访问
53.4k

评分及理由
(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分
登录后发布评论
暂无评论,来抢沙发