在网上发现一个组合的算法,感觉不错,把它收藏起来先。
本程序的思路是开一个数组,其下标表示1到m个数,数组元素的值为1表示其下标
代表的数被选中,为0则没选中。
首先初始化,将数组前n个元素置1,表示第一个组合为前n个数。
然后从左到右扫描数组元素值的“10”组合,找到第一个“10”组合后将其变为
“01”组合,同时将其左边的所有“1”全部移动到数组的最左端。
当第一个“1”移动到数组的m-n的位置,即n个“1”全部移动到最右端时,就得
到了最后一个组合。
例如求5中选3的组合:
1 1 1 0 0 //1,2,3
1 1 0 1 0 //1,2,4
1 0 1 1 0 //1,3,4
0 1 1 1 0 //2,3,4
1 1 0 0 1 //1,2,5
1 0 1 0 1 //1,3,5
0 1 1 0 1 //2,3,5
1 0 0 1 1 //1,4,5
0 1 0 1 1 //2,4,5
0 0 1 1 1 //3,4,5
文章出处:http://www.diybl.com/course/3_program/java/javashl/2008118/96577.html
我在里边想到一种扩展,如果需要有重复的组合,如“111”,可以在原先的基础上每个种类扩展,像上边的题目,把原先的“1,2,3,4,5”改成是“11,12,13,21,22,23,31,32,33,41,42,43,51,52,53”,这样的话相当于15选3,但是它支持重复选择某一个数。
分享到:
相关推荐
排列组合是常见的数学问题,本文就以完整实例形式讲述了C#实现排列组合算法的方法。分享给大家供大家参考之用。具体方法如下: 首先,数学中排列组合,可表示为:排列P(N,R) 其实排列实现了,组合也就实现了,组合...
C++实现生成组合算法
PHP实现多种类型的排列组合算法,PHP多种方式实现排列组合算法。非常有用,欢迎下载。
主要介绍了基于Vue实现电商SKU组合算法问题 ,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
本资源附带文档解释了排列组合算法的实现和原理。其中排列算法是基于递归实现的,组合算法是基于高效的位移法实现的。代码是使用Java版实现的。
Java排列组合算法 - 郭睿的专栏 - CSDN博客Java排列组合算法 - 郭睿的专栏 - CSDN博客
该文档对排列组合问题的算法设计问题进行一系列讲述
这些讲义涵盖了算法,尤其是组合算法,其主要目标是创建正确且始终有效的算法。
组合算法,在VC中调试通过。改写了排列的一段代码, 可以完成组合功能。
排列组合算法实现,支持模板类。支持重复数的排列。算法采用递归方法,简单易懂。
基于C# 实现的组合算法,可实现对任意类型的数据进行n选m的组合, 比如数字,字符串,对象等。 n必须大于0小于Int.MaxValue
本程序是排列组合算法的c语言表示,使用递归实现
计算机程序设计艺术:第4卷.第0册(双语版)组合算法与布尔函数概论
大师Donald E. Knuth(汉名高德纳)的著作,计算机程序设计与艺术第四卷0册:组合算法与布尔函数概论Combinatorial Algorithms and Boolean Functions(中英)
易语言4位特定组合算法源码,4位特定组合算法,组合算法
把15个梨分给5个人,每人最少2个,最多5个的组合算法,返回一个数组 - (NSArray *)createRandomArrayForCount:(NSInteger)aCount min:(NSInteger)aMin max:(NSInteger)aMax people:(NSInteger)aPeople
简单的组合算法,一个递归的应用示例,递归减少了很多代码
动态规划,分治算法,概率算法,模拟退火算法,搜索算法,贪婪算法,网上matlab,遗传算法,组合算法.
毕业设计:关联规则和决策树组合算法在学生成绩分析中的研究 毕业设计:关联规则和决策树组合算法在学生成绩分析中的研究 毕业设计:关联规则和决策树组合算法在学生成绩分析中的研究 毕业设计:关联规则和决策树...