免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: chenyajun5
打印 上一主题 下一主题

[算法] 请教一个算法问题。 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2006-06-30 14:36 |只看该作者
ok,非常感谢大家。

论坛徽章:
0
12 [报告]
发表于 2006-06-30 17:31 |只看该作者
原帖由 libin1983 于 6/30/06 13:27 发表

好办法!(当内存足够大时 :wink:)


那就稍稍修改一下qsort调用的partition函数

当partition返回的位数(该位前面的数都大于该位上的数,后面的数都小于该位上的数)大于200时
就减去该位及该位以后所有的数

论坛徽章:
0
13 [报告]
发表于 2006-06-30 17:39 |只看该作者
构造一个大顶堆然后不断删除最顶元素应该也很快(似乎比qsort之后取前几个还要快)

论坛徽章:
0
14 [报告]
发表于 2006-06-30 18:48 |只看该作者
STL 中partial_sort,nth_element,stable_partition都可实现

nth_element提取元素后不排序
partial_sort提取元素后排序
stable_partition稳定排序

都是专家写的,咱们写肯定不如他们的好,不如不写。

论坛徽章:
0
15 [报告]
发表于 2006-06-30 21:35 |只看该作者
#include <algorithm>
using namespace std;

bool Larger(int iNumber1, int iNumber2)
{
      if (iNumber1 > iNumber2) {
          return true;
      }else {
          return false;
      }
}
vector<int> intVector; // 在这个整数向量中保存你要处理的整数

vector<int>::iterator first = intVector.begin();
vector<int>::iterator last = intVector.end();

sort(first, last, Larger);

论坛徽章:
0
16 [报告]
发表于 2006-07-01 22:12 |只看该作者
原帖由 liubinbj 于 2006-6-30 18:48 发表
STL 中partial_sort,nth_element,stable_partition都可实现

nth_element提取元素后不排序
partial_sort提取元素后排序
stable_partition稳定排序

都是专家写的,咱们写肯定不如他们的好,不如不写。


请问,这3个都是c++中的函数么?俺没有用过c++,没用过这些函数。。你的意思是参考这些函数然后进行改写?

论坛徽章:
0
17 [报告]
发表于 2006-07-01 22:18 |只看该作者
原帖由 windyheart 于 2006-6-30 21:35 发表
#include <algorithm>
using namespace std;

bool Larger(int iNumber1, int iNumber2)
{
      if (iNumber1 > iNumber2) {
          return true;
      }else {
          return false;
...


sort是什么排序函数?快速排序么?俺没用过c++,麻烦解释这段代码含义。。

论坛徽章:
0
18 [报告]
发表于 2006-07-01 22:32 |只看该作者
原帖由 chenyajun5 于 2006-7-1 22:12 发表


请问,这3个都是c++中的函数么?俺没有用过c++,没用过这些函数。。你的意思是参考这些函数然后进行改写?


你想改专家写的?没必要把,用就是了。

论坛徽章:
0
19 [报告]
发表于 2006-07-08 13:34 |只看该作者
原帖由 chenyajun5 于 2006-7-1 22:18 发表


sort是什么排序函数?快速排序么?俺没用过c++,麻烦解释这段代码含义。。


不好意思啊!以前给你写的解答有些问题!在linux下面应该是编译不过去的!(主要那时对sort还不太理解) 下面是正确的解答(我这里用了partial_sort,因为你只想从N个整数中找到M个最大的数)

#include <algorithm>
#include <functional>
using namespace std;


vector<int> intVector;
vector<int>::iterator first;
vector<int>::iterator last;

// 把你要排序的整数存到上面的整数向量中去
intVector.push_back(...);
......

// 现在你已近将N个数都装到intVector中了, 这样我们可以对intVector排序
first = intVector.begin();
last = intVector.end();
partial_sort(first, first + M, last, great<int>());

// 现在intVector中的前M个数已经是N个中最大的了

希望以上所说的能对你有些帮助!
        ^_^ (如果你想了解sort的用法,可以到我的博客中看我的一篇文章)

论坛徽章:
4
CU大牛徽章
日期:2013-03-13 15:29:07CU大牛徽章
日期:2013-03-13 15:29:49CU大牛徽章
日期:2013-03-13 15:30:192015亚冠之广州恒大
日期:2015-07-22 17:20:15
20 [报告]
发表于 2006-07-08 18:22 |只看该作者
我觉得这个问题如果要最快的话 锦标赛算法应该是最快的
就是建树比较 然后大的数能尽一级 最大的数自然就是root 然后左右子树 分别就是次大和第三大的数 以此类推 要钱m的 从root取起 取m个元素 就够了

锦标赛 还是蛮经典算法
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP