找到K个最大N个数的方法有多复杂

时间:2017-02-14 12:30:55

标签: algorithm sorting

this post on how to find the K largest of N elements中,提出的第二种方法是:

  1. 将前k个元素存储在临时数组temp [0..k-1]。
  2. 找到temp []中的最小元素,让最小元素为min。
  3. 对于arr [k]到arr [n-1]中的每个元素x 如果x大于min,则从temp []中删除min并插入x。
  4. 打印temp []
  5. 的最终k个元素

    虽然我理解这种方法,但我不明白他们的计算方法 时间复杂度O((n-k)*k)

    从我的角度来看,您正在对n-k元素进行线性遍历,并对每个元素进行单一比较。然后可能替换临时K元素数组的一个元素。

    更具体地说,他们计算的*k方面在哪里? O((n-k)*k)的时间复杂性来自哪里?为什么它们会乘以n-k

1 个答案:

答案 0 :(得分:1)

让我们考虑一下foreach($types as $type) { $c = Mage::app()->getCacheInstance()->cleanType($type); Mage::dispatchEvent('adminhtml_cache_refresh_type', array('type' => $type)); }

kth iteration

现在,您将arr[k] > min(temp[0..k-1] 替换为min(temp[0..k-1])

现在您再次需要计算arr[k]的更新min,因为这会发生变化。它可以是您更新的temp[0..k-1],

中的任意数字

所以在最坏的情况下,你每次更新min,因此temp[0..k-1]

因此,时间复杂度 = O(k)