您的位置:首页 > 其它

组合的生成算法

2009-10-07 16:54 260 查看
本组合生成算法采用非递归生成方法,效率比较高。

/**
* 组合的生成算法
* 实现枚举出组合C(n,r)
*/
package source;

/**
* @author lgj
* @time 2009.10.03
*/
public class Combination {

/**
* @param args[0] n
* @param args[1] r
*/
public static void main(String[] args) {
int n = Integer.parseInt(args[0]);
int r = Integer.parseInt(args[1]);
int[] a = new int [r+1];//without using of a[0];
int i;
for(i=0;i<=r;i++) a[i]=i;
for(i=1;i<=r;i++)
System.out.print(a[i]+" ");
System.out.println();
while(a[1]!=n-r+1) {
i=r;
while(a[i]==n-r+i)//从后往前找第一个小于n-r+i的位置
i--;
a[i]++;//该位置值自加1
i++;
while(i<=r) {
a[i]=a[i-1]+1;
i++;
}
for(i=1;i<=r;i++)
System.out.print(a[i]+" ");
System.out.println();
}
}

}


参考文献:

《组合数学(第二版)》 卢开澄 卢华明 著 清华大学出版社 2002

声明:代码为本人原创 欢迎转载 另外本人利用java写的程序并不多,经验不足,代码中不足之处欢迎同行们指正!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: