m********r 发帖数: 334 | 1 【 以下文字转载自 Programming 讨论区 】
发信人: mindreader (摩登原始人), 信区: Programming
标 题: 一个查找算法题
发信站: BBS 未名空间站 (Thu Aug 26 15:21:14 2010, 美东)
如何在一个大数组里的几个子数组中(序号不一定相连,比如2-30, 54-200)找出最
大的N个数,N<5,要求时间最快,不要求排序。
N=1 我的解法是利用下标把数分成奇偶两组,每次循环比较一次,然后比较最大的两个
数谁大,但是 N>2以后还能如此类似吗? |
h**6 发帖数: 4160 | 2 这种题用堆可以解吧。最大的 N 个数用最小堆,最小的 N 个数用最大堆。 |
f*********5 发帖数: 576 | 3 N=1时直接求跟你的做法有什么区别?
【在 m********r 的大作中提到】 : 【 以下文字转载自 Programming 讨论区 】 : 发信人: mindreader (摩登原始人), 信区: Programming : 标 题: 一个查找算法题 : 发信站: BBS 未名空间站 (Thu Aug 26 15:21:14 2010, 美东) : 如何在一个大数组里的几个子数组中(序号不一定相连,比如2-30, 54-200)找出最 : 大的N个数,N<5,要求时间最快,不要求排序。 : N=1 我的解法是利用下标把数分成奇偶两组,每次循环比较一次,然后比较最大的两个 : 数谁大,但是 N>2以后还能如此类似吗?
|
m********r 发帖数: 334 | 4 快一些,循环次数少,流水线易优化。
【在 f*********5 的大作中提到】 : N=1时直接求跟你的做法有什么区别?
|
f*********5 发帖数: 576 | 5 怎么快?
比较次数少?
举个例子说具体点吧,谢谢
【在 m********r 的大作中提到】 : 快一些,循环次数少,流水线易优化。
|
m********r 发帖数: 334 | 6 循环次数少,每次下标加2,用两个指针分别从开始两个数和后面的比较,最后比较两
组的最大值。
【在 f*********5 的大作中提到】 : 怎么快? : 比较次数少? : 举个例子说具体点吧,谢谢
|