文章
161
粉丝
0
获赞
0
访问
20.2k
(1)使用堆排序,建立小根堆,不断输出根结点,直到输出十个为止。
(2)时间复杂度:O(nlogn) 空间复杂度:O(1)
评分及理由
(1)得分及理由(满分5分)
得0分。算法思想描述错误。题目要求查找最小的10个数,但学生提出的方法是建立小根堆并不断输出根结点(即每次输出当前最小值),这实际上是对整个数组进行堆排序并取前10个元素。这种方法需要构建整个数组的堆(时间复杂度O(n))并进行10次提取(每次提取后需要调整堆,每次调整O(log n)),但为了获取最小的10个数,实际上需要完整排序整个堆(或部分排序)?但学生的描述“不断输出根结点”意味着需要执行10次提取操作,但每次提取后需要重新调整堆,这确实可以找到最小的10个元素,但这种方法的时间复杂度并不是最优的,且与标准答案(使用插入排序思想或大根堆维护前10小)不同。然而,关键错误在于:学生的方法会破坏原数组(因为提取根结点后需要调整堆),并且需要构建整个数组的堆(空间复杂度O(1)但时间复杂度为O(n + k log n),其中k=10,即O(n + 10 log n) ≈ O(n)),但学生描述为“建立小根堆”并“输出根结点”,这实际上需要构建整个堆(O(n)时间)然后提取10次(每次O(log n)),总时间O(n + k log n)=O(n),但学生错误地给出了时间复杂度O(n log n)(见第2问),说明其理解有误。因此,算法思想描述不准确且效率不最优,但并非完全错误(该方法可行但非最优,且描述不清)。但标准答案要求平均情况比较次数尽可能少,而该方法构建整个堆的代价较高(尽管渐近时间相同,但常数较大),且学生未说明如何维护前10小(而是排序整个数组),因此扣分。综上,算法思想部分正确但效率不高且描述不清,给0分。
(2)得分及理由(满分5分)
得0分。时间复杂度分析错误。学生给出的时间复杂度是O(n log n),但实际建立小根堆的时间为O(n),然后提取10次(每次O(log n))总时间为O(n + 10 log n)=O(n),而不是O(n log n)。空间复杂度O(1)正确(原地构建堆)。但由于时间复杂度分析错误,扣分。
题目总分:0+0=0分
登录后发布评论
暂无评论,来抢沙发