求组合算法,难啊

frb2008 2007-11-24 11:36:16
有一2维数组[3,7],3行7列,存放不同的数据,如下:
a1 a2 a3 a4 a5 a6 a7
b1 b2 b3 b4 b5 b6 b7
c1 c2 c3 c4 c5 c6 c7
按任意1个元素组合时,有21种组合方式
按任意2个元素组合时,有420种组合方式
按任意3个元素组合时,有7980种组合方式
……
……
……

问题是:如何输出它们的各个组合???

求一算法:输出1至5个元素任意组合时的各个组合结果?
譬如2个元素组合时输出:a1a2 a1a3 a2a3……

感激不尽!!
...全文
219 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
frb2008 2007-11-25
  • 打赏
  • 举报
回复
谢谢阿诺!!
medie2005 2007-11-24
  • 打赏
  • 举报
回复
如你需要的确实是组合,可以参考下帖:
http://topic.csdn.net/u/20071119/14/abe5784c-3de5-4c07-b248-c29e3dc457ba.html
在那里面有效率非常好的组合生成算法。
medie2005 2007-11-24
  • 打赏
  • 举报
回复
是组合吗?
“按任意2个元素组合时,有420种组合方式”

21选2个的组合数是:21*20/2=210,怎么有420中组合方式?
21选2个的排列数才是420种。
frb2008 2007-11-24
  • 打赏
  • 举报
回复
谢谢!
frb2008 2007-11-24
  • 打赏
  • 举报
回复
我只要组合就行了
medie2005 2007-11-24
  • 打赏
  • 举报
回复
贴一下代码:
#include   <iostream>
#include <algorithm>
#include <iterator>
#include <string>

using namespace std;

string List[3][7]={"a1", "a2", "a3", "a4", "a5", "a6", "a7",
"b1", "b2", "b3", "b4", "b5", "b6", "b7",
"c1", "c2", "c3", "c4", "c5", "c6", "c7"
};

void f( int n, int m ){
int *A=new int[n+1], *B=new int[m+1], *T=new int[m+1];
int i, j, h, line=sizeof(List[0])/sizeof(List[0][0]);
for( i=1; i <=n; ++i ) A[i]=i-1;
for( i=1; i <=m; ++i ) B[i]=m;
while( B[1] <n ){
for( h=0; h<m+1; ++h ) T[h]=A[h];
sort( T+1, T+m+1 );
do{
for( h=1; h<m+1; ++h )
cout<<List[T[h]/line][T[h]%line]<<" ";
cout<<endl;
}while( next_permutation( T+1, T+m+1 ) );
j=m;
while( B[j]==n )
--j;
++B[j];
for( i=j+1; i <=m; ++i )
B[i]=B[j];
swap( A[j], A[B[j]] );
}
for( h=0; h<m+1; ++h ) T[h]=A[h];
sort( T+1, T+m+1 );
do{
for( h=1; h<m+1; ++h )
cout<<List[T[h]/line][T[h]%line]<<" ";
cout<<endl;
}while( next_permutation( T+1, T+m+1 ) );
delete []A; delete []B; delete []T;
}

int main(int argc, char *argv[])
{
int k;
cin>>k;
f( sizeof(List)/sizeof(List[0][0]), k );
return 0;
}

k为2,则输出“2个元素组合时输出”。
medie2005 2007-11-24
  • 打赏
  • 举报
回复
我没理解错的话,就是求21个选1,21个选2,...,21个选5时的的所有排列。
这个不叫组合,叫排列。

先生成21个选k个的所有组合,再将每个得到的组合全排序就可以了。
medie2005 2007-11-24
  • 打赏
  • 举报
回复
首先,二维的数组可以转化为一维的:比如List[3][7],可以看成A[21],其中A[i]=List[i/7][i%7]。

然后,我在上面链接的帖子中给的方法,是生成1,2,3...,n的m组合的算法。

将所有的元素存在数组List[]中,不管要输出的组合的元素是什么形式的,数组的下标可以表示一个元素,而下标总是整型的。因此,对得到的一个1,2,3...,n的m组合a1,a2,...am,只要输出List[a1],List[a2],list[a3],...,List[am]就可以了(假设List[]中从下标1开始存数据)。

具体的代码实现可以看我在2楼贴的代码。
frb2008 2007-11-24
  • 打赏
  • 举报
回复
to medie2005
像我这个如何输出组合呢?
frb2008 2007-11-24
  • 打赏
  • 举报
回复
哦!谢谢!看了,还是不很明白
推荐算法系统实战全系列精品课 :一、课程优势本课程有陈敬雷老师的清华大学出版社配套新书教材《分布式机器学习实战》人工智能科学与技术丛书,新书配合此实战课程结合学习,一静一动,互补高效学习!本课程由互联网一线知名大牛陈敬雷老师全程亲自授课,技术前沿热门,这个《推荐算法系统实战全系列精品课》来自陈敬雷在一线大型互联网公司的多年实战经验总结,比较完备的包含了各个算法系统模块,实实在在的重量级干货分享!听完此系列课,可以实现一个完整的推荐系统!二、课程简介       首先推荐系统不等于推荐算法,更不等于协同过滤。推荐系统是一个完整的系统工程,从工程上来讲是由多个子系统有机的组合,比如基于Hadoop数据仓库的推荐集市、ETL数据处理子系统、离线算法、准实时算法、多策略融合算法、缓存处理、搜索引擎部分、二次重排序算法、在线web引擎服务、AB测试效果评估、推荐位管理平台等,每个子系统都扮演着非常重要的角色,当然大家肯定会说算法部分是核心,这个说的没错,的确。推荐系统是偏算法的策略系统,但要达到一个非常好的推荐效果,只有算法是不够的。比如做算法依赖于训练数据,数据质量不好,或者数据处理没做好,再好的算法也发挥不出价值。算法上线了,如果不知道效果怎么样,后面的优化工作就无法进行。所以AB测试是评价推荐效果的关键,它指导着系统该何去何从。为了能够快速切换和优化策略,推荐位管理平台起着举足轻重的作用。推荐效果最终要应用到线上平台去,在App或网站上毫秒级别的快速展示推荐结果,这就需要推荐的在线Web引擎服务来保证高性能的并发访问。这么来说,虽然算法是核心,但离不开每个子系统的配合,另外就是不同算法可以嵌入到各个子系统中,算法可以贯穿到每个子系统。       从开发人员角色上来讲,推荐系统不仅仅只有算法工程师角色的人就能完成整个系统,需要各个角色的工程师相配合才行。比如大数据平台工程师负责Hadoop集群和数据仓库,ETL工程师负责对数据仓库的数据进行处理和清洗,算法工程师负责核心算法,Web开发工程师负责推荐Web接口对接各个部门,比如网站前端、APP客户端的接口调用等,后台开发工程师负责推荐位管理、报表开发、推荐效果分析等,架构师负责整体系统的架构设计等。所以推荐系统是一个多角色协同配合才能完成的系统。       下面我们就从推荐系统的整体架构以及各个子系统的实现给大家深度解密来自一线大型互联网公司重量级的实战产品项目!!!推荐算法系统实战课程大纲如下:1、推荐系统架构设计2、推荐数据仓库集市3、推荐系统ETL数据处理4、CF协同过滤用户行为挖掘5、推荐算法ALS交替最小二乘法6、推荐系统ContentBase文本挖掘算法7、用户画像兴趣标签提取算法8、基于用户心理学模型推荐9、推荐系统多策略融合算法10、准实时在线学习推荐引擎11、Redis分布式缓存处理12、分布式搜索引擎13、推荐Rerank二次重排序算法(基于逻辑回归、GBDT、随机森林、神经网络的算法思想做二次排序)【可试听】14、推荐Rerank二次重排序算法(基于Learning TO rank排序学习思想做二次排序)15、推荐Rerank二次重排序算法(基于加权公式思想做二次排序)16、在线Web实时推荐引擎服务原理及核心处理算法17、在线Web实时推荐引擎服务核心源代码解析18、在线AB测试推荐效果评估19、离线AB测试推荐效果评估20、推荐位管理平台 21、大数据用户画像系统架构图深度解密与详细介绍22、大数据用户画像系统中各个子系统详细讲解三、老师介绍陈敬雷  充电了么创始人,CEO兼CTO陈敬雷,北京充电了么科技有限公司创始人,CEO兼CTO,十几年互联网从业经验,曾就职于用友、中软、凡客、乐蜂网(唯品会)、猎聘网、人民日报(灵思云途)、北京万朝科技,曾任架构师、首席技术官、首席科学家等职务,对业务领域B端、C端、电商、职场社交招聘、内容文娱、营销行业都有着丰富的经验,在技术领域,尤其在大数据和人工智能方向有丰富的算法工程落地实战经验,其中在猎聘网任职期间主导的推荐算法系统项目获得公司优秀项目奖,推荐效果得到5倍的提升。陈敬雷著有清华大学出版社两本人工智能书籍,分别是《分布式机器学习实战(人工智能科学与技术丛书)》已出版、《自然语言处理原理与实战(人工智能科学与技术丛书)》。目前专注于大数据和人工智能驱动的上班族在线教育行业,研发了充电了么app和网站,用深度学习算法、nlp、推荐引擎等技术来高效提升在线学习效率。

33,010

社区成员

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

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