搜索O(n + logn)时间内的最大和第二大数字

时间:2012-05-31 14:36:34

标签: algorithm

  

可能重复:
  Find the 2nd largest element in an array with minimum # of comparisom

我是否知道如何在O(n + logn)时间内搜索最大和最大的数字? 提前谢谢。

祝你好运, Pidig

3 个答案:

答案 0 :(得分:7)

请注意O(n+logn) = O(n),并在列表上迭代两次{。{1}}。

  1. 迭代一次以找到最大值并删除/标记它,
  2. 然后迭代第二次找到新的最大值(第二大 元件),
  3. 因为它在数组上迭代常数,算法为O(n)

    对于通用O(n)最大元素:您可以使用k中的分钟heapO(nlogk)中的selection algorithm来执行此操作 - 如{ {3}},但对于两个最大的元素 - 这些方法都是过度的。

答案 1 :(得分:3)

我猜你的意思是n + log(n) - 2次比较。

这是你如何做到的。

比较两组中的元素。即,每组制作n / 2组两个元素。

以这种方式继续使用n / 4,n / 8,n / 16等等,直到获得第一个(最大)元素。

现在,下一个最大元素必须是此方法中第一个元素的输家。因此log(n)对此进行了更多的比较。

准确地说,这将需要n + log(n) - 2次比较。

答案 2 :(得分:1)

您实际上可以在O(n)时间内执行此操作:Selection Algorithm