博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
求组合算法-----m个元素中选n个
阅读量:6818 次
发布时间:2019-06-26

本文共 1235 字,大约阅读时间需要 4 分钟。

组合算法 

本程序的思路是开一个数组,其下标表示1到m个数,数组元素的值为1表示其下标 
代表的数被选中,为0则没选中。 
首先初始化,将数组前n个元素置1,表示第一个组合为前n个数。 
然后从左到右扫描数组元素值的“10”组合,找到第一个“10”组合后将其变为 
“01”组合,同时将其左边的所有“1”全部移动到数组的最左端。 
当第一个“1”移动到数组的m-n的位置,即n个“1”全部移动到最右端时,就得 
到了最后一个组合。 

abcde

例如求5中选3的组合: 

1 1 1 0 0 //1,2,3 abc 
1 1 0 1 0 //1,2,4 abd
1 0 1 1 0 //1,3,4 acd
0 1 1 1 0 //2,3,4 bcd
1 1 0 0 1 //1,2,5 abe
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  

一种代码实现。

public class Choose {    /*     * Choose m elements from a array which totally has n elements.     * Algorithm Description     * For example, choose 3 elements from 5 elements [a,b,c,d,e]     * we need an number array that contains only 0 or 1 numbers     * 1 represents choosed.     * start: 11100     * generate next by :      * scan from left to right, find the first 10, switch it to 01, scan to right, adjust the right part of the      * string to 11..00.. format( 1 is always at the left of 0).     * 11(10)0 --> 1(10)10 --> (10)110 ---> 011(10) --->      * 01(10)1 --> 0(10)11 --> 00111      * end     */    public void choose(char cArr[], int n){        int m=cArr.length;        int num[]=new int[m];        for(int i=0;i

转载于:https://www.cnblogs.com/gaoqichao/archive/2012/07/28/2613340.html

你可能感兴趣的文章
jxl(Java Excel API) 使用方法 【1】
查看>>
Mac系统中各个文件夹简单介绍(转)
查看>>
流媒体技术学习笔记之(八)海康、大华IpCamera RTSP地址和格式
查看>>
[React] Test friendly approach
查看>>
MySQL InnoDB 引擎的持久性与性能
查看>>
java------HashMap与HashSet的区别
查看>>
GaugeControl 之 DigitalGauge
查看>>
Mysql之sql语句操作
查看>>
C#中按模板操作Word —— 如何向Word中插入图片
查看>>
Linux设备驱动--块设备(三)之程序设计
查看>>
【前端】:jQuery下
查看>>
安卓解析 json 4种格式 全解析
查看>>
asd
查看>>
北斗有 35 颗卫星,而 GPS 有 24 颗卫星,为什么二者数量不同?
查看>>
java中的类、成员变量、方法的修饰符。
查看>>
.NET Core配置文件加载与DI注入配置数据
查看>>
JAVA_StandardServer await create[8005]怎么办
查看>>
servlet与CGI的区别
查看>>
【Spring】3、BeanFactory 和 ApplicationContext的区别
查看>>
Sharpdevelop如何在项目中添加类文件
查看>>