这是来自Cormen文本的问题,但我想看看是否还有其他解决方案。寻找m最大数字
给定一个具有n个不同数字的数组,你需要找到数组中最大的m个数组,并且它们按照排序顺序排列。假设n和m很大,但增长不同。特别是,你需要 在m = t * n的情况下考虑,其中t是一个小数字,比如说0.1,然后是m =√n。
书中给出的解决方案提供3个选项:
- 排序阵列并返回顶部米长的段
- 阵列转换为最大堆并提取m个元素
- 选择第m个最大的数字,对该数组进行分区,然后对较大条目的分段进行排序。
这些都有道理,他们都有自己的优点和缺点,但我想知道,有没有另一种方式来做到这一点?它不一定要更好或更快,我只是好奇,看看这是更多解决方案的常见问题,还是仅限于这3种选择。
通过数组“m”次遍历你的最后一个最大值,以抓取最近的一个,而不会超过。价格是正确的风格。 – 2014-10-29 15:33:11
Mb这样的事情。有优先级队列长度为'm',按顺序放置数字,所以在队列的开始处是最大的数字,最后是最小的数字。然后你拿下一个号码,如果它比较小,那么你不会做的最小的号码不会超大,而是将它插入wright order。它与第2点的最大堆相同,但我们有一个有限的堆(或队列,不知道什么会更好) – 2014-10-29 15:38:12
@CBif'm'太大了,你有O(n^2),它更快用快速排序对它进行排序 – 2014-10-29 15:40:21