我需要编写一个算法,找到最少的n个元素:
我想到了选择搜索算法,但我认为它比log(n)次更多地比较每个元素。
有什么想法吗? 谢谢!
答案 0 :(得分:2)
您可以将选拔过程视为锦标赛:
我会给出递归解决方案,但你也可以迭代地实现它。
smallestElement(A[1...n]):
if size(A) == 1:
return A[1]
else
return min(smallestElement(A[1...n/2], smallestElement(A[n/2 + 1...n]))
递归具有深度记录,因为在每个级别我们将输入的大小除以2,因此锦标赛的获胜者参与logn比较,并且没有一个元素参与更多的比较。