求在100w个数中找出前100大数的算法

Kandada1985 2009-07-16 11:57:56
rt,请教各位达人,怎么是最高效的算法呢?
谢谢了
...全文
596 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
jmailhappy 2011-08-05
  • 打赏
  • 举报
回复
最大堆求前n小,最小堆求前n大!
千与 2009-07-17
  • 打赏
  • 举报
回复
堆排序(基于大根堆建堆),选出100个大数。
yinfie 2009-07-17
  • 打赏
  • 举报
回复
用堆栈
jlp999 2009-07-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 marf_cn 的回复:]
大顶堆
[/Quote]

应该是小头堆,每次比较是于当前最小值比,而不是与当前最大值比。
zhangdp_neu 2009-07-17
  • 打赏
  • 举报
回复
用堆
或位图算法都可以解决。
jlp999 2009-07-16
  • 打赏
  • 举报
回复
堆选正解;
详细说下:
1 小头堆;
2 堆固定大小为100;
3 堆元素个数小于100时直接加入堆;
4 堆元素个数等于100时,与堆顶元素比较,并调整堆;
5 遍历结束时,堆中元素为100个最大数。



dirtysalt 2009-07-16
  • 打赏
  • 举报
回复
堆选正解.用STL里面的partial_sort或者是nth_element
bigbug9002 2009-07-16
  • 打赏
  • 举报
回复
用堆选出来吧.
abcdef0966 2009-07-16
  • 打赏
  • 举报
回复
《编程之美》有详细解释,建议去看下
Gdj 2009-07-16
  • 打赏
  • 举报
回复
才100w个数嘛。就算是DWORD一个数4字节。400w字节也不过就几M而已。现在个人机器内存都按G算的了,怎么会放不下?
bigbug9002 2009-07-16
  • 打赏
  • 举报
回复
如果内存放不上,那就要用外排.
设一100大小的带索引的数组.
设一10000大小的数组,每次读1W的数据进来建大顶堆,堆顶放入100大小的数组,10000数据保存为文件.直到100w的数据全处理完,再对100大小的数组建大顶堆,选出最大的后,对应的10000数据调整堆,用新的堆顶换掉100大小的数组的堆顶,再对100大小的数组调整堆.循环下去.
conquersky 2009-07-16
  • 打赏
  • 举报
回复
在算法导论的 线性查找 那章有这方面的提示 大概复杂度是O(n)
shine_paul 2009-07-16
  • 打赏
  • 举报
回复
堆的算法我倒是可以理解,但是这有100w的数据啊,这个数据的庞大性那可不是开玩笑的~~~一般这100w的数据应该存放在哪里啊?然后这么把这些数据提取出来呢?貌似第一次提取100个,后面的都是每次提取一个,并进行DeleteMin和Insert的操作吧,那这个时间不是相当的长!!!我这样理解可以不?
marf_cn 2009-07-16
  • 打赏
  • 举报
回复
大顶堆

33,027

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧