使用每个元素的log(n)比较找到至少n个元素

时间:2013-06-16 11:47:08

标签: algorithm search selection minimum

我需要编写一个算法,找到最少的n个元素:

  1. n-1比较。
  2. 每个元素仅执行log(n)比较。
  3. 我想到了选择搜索算法,但我认为它比log(n)次更多地比较每个元素。

    有什么想法吗? 谢谢!

1 个答案:

答案 0 :(得分:2)

您可以将选拔过程视为锦标赛:

  1. 第一个元素与第二个元素进行比较,第三个元素与第四个元素进行比较,依此类推。
  2. 比较的胜利者是较小的元素。
  3. 所有获奖者以同样的方式参加下一轮比赛,直至剩下一个元素。剩下的元素是最小的元素。
  4. 伪代码

    我会给出递归解决方案,但你也可以迭代地实现它。

    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比较,并且没有一个元素参与更多的比较。

相关问题