作业帮 > 数学 > 作业

同学面试得到的题目,求n(n=100)个数中第5大的数最快速的算法

来源:学生作业帮 编辑:拍题作业网作业帮 分类:数学作业 时间:2024/04/30 20:02:33
同学面试得到的题目,求n(n=100)个数中第5大的数最快速的算法
面试官给的答案是,用堆排序,建5个数的堆,然后将余下的数替换进去,进行调堆算法n次,复杂度为nlog5,那为什么不可以对n个数建堆,进行5次调堆算法,求出第5大的数,算法复杂度为5logn,不是更小么,这样想有什么问题么,
对n个树建堆,一次调堆算法的复杂度跟堆的深度有关,而堆的深度大约是logn级别的,所以一次调堆的复杂度是logn,那求第5大的数,只需5次,那个复杂度是5logn,
你把建堆的消耗忽略了,
你建堆的过程时间复杂度是O(n),然后调用5次时间复杂度为5O(logn),相当于O(n)+5O(logn) = O(n)
再问: 照你这么说,堆排序的算法复杂度应该不止nlogn吧??
再答: 堆排序,建堆O(n),依次出堆O(nlogn), O(n)+O(nlogn) = O(nlogn)