在整数数组中查找top log(n)或top sqt(n)值

时间:2011-12-21 08:13:12

标签: c++ c square-root

你明白这个问题是什么意思

在小于线性时间内查找整数数组中的顶部log(n)或top sqt(n)值。

如果不这样做,则问题为http://www.careercup.com/question?id=9337669

请您帮助我理解这个问题,然后可以解决它。 (虽然一旦我理解,我也可以解决它)

感谢您的时间。

2 个答案:

答案 0 :(得分:6)

对于非排序数组,复杂度是线性的,但可以通过观察log(n)和sqrt(n)都是单调增长函数来提高性能,因此max(log(n),... )也是log(max(n,...))和sqrt相同。

所以只需找到max(n)(线性)并计算log和sqrt。

答案 1 :(得分:3)

假设数组没有排序,这个问题是Omega(n),因为你需要读取所有元素[在非排序数组中找到max Omega(n)问题,这个问题并不容易找到最大。所以,它没有次线性解决方案。

使用selection algorithm

O(n) [线性]解决方案
1. find the log(n) biggest element. //or sqrt(n) biggest element...
2. scan the array and return all elements bigger/equal it.

(*)如果数组包含dupes,则此伪代码不正确,但在第二步中修剪欺骗相当容易。