`

组合算法 java

阅读更多
 import java.util.ArrayList;
 import java.util.List;


 public class Copy_2_of_StatisAnyThree {
     public static void main(String[] args) {
         Copy_2_of_StatisAnyThree s = new Copy_2_of_StatisAnyThree();
         s.printAnyThree();      
     }

     public void printAnyThree(){
         int[] num = new int[]{1,2,3,4,5,6};
         print(combine(num,3));
     }

     /**
      * 从n个数字中选择m个数字
      * @param a
      * @param m
      * @return
      */
     public List combine(int[] a,int m){
         int n = a.length;
         
         List result = new ArrayList();
         
         int[] bs = new int[n];
         for(int i=0;i<n;i++){
             bs[i]=0;
         }
         //初始化
         for(int i=0;i<m;i++){
             bs[i]=1;
         }
         boolean flag = true;
         boolean tempFlag = false;
         int pos = 0;
         int sum = 0;
         //首先找到第一个10组合,然后变成01,同时将左边所有的1移动到数组的最左边
         do{
             sum = 0;
             pos = 0;
             tempFlag = true; 
             result.add(print(bs,a,m));
             
             for(int i=0;i<n-1;i++){
                 if(bs[i]==1 && bs[i+1]==0 ){
                     bs[i]=0;
                     bs[i+1]=1;
                     pos = i;
                     break;
                 }
             }
             //将左边的1全部移动到数组的最左边
             
             for(int i=0;i<pos;i++){
                 if(bs[i]==1){
                     sum++;
                 }
             }
             for(int i=0;i<pos;i++){
                 if(i<sum){
                     bs[i]=1;
                 }else{
                     bs[i]=0;
                 }
             }
             
             //检查是否所有的1都移动到了最右边
             for(int i= n-m;i<n;i++){
                 if(bs[i]==0){
                     tempFlag = false;
                     break;
                 }
             }
             if(tempFlag==false){
                 flag = true;
             }else{
                 flag = false;
             }
             
         }while(flag);
         result.add(print(bs,a,m));
         
         return result;
     }
     
     private int[] print(int[] bs,int[] a,int m){
         int[] result = new int[m];
         int pos= 0;
         for(int i=0;i<bs.length;i++){
             if(bs[i]==1){
                 result[pos]=a[i];
                 pos++;
             }
         }
         return result ;
     }
     
     private void print(List l){
         for(int i=0;i<l.size();i++){
             int[] a = (int[])l.get(i);
             for(int j=0;j<a.length;j++){
                 System.out.print(a[j]+"\t");
             }
             System.out.println();
         }
     }
} 
 
分享到:
评论

相关推荐

    java组合算法

    ### Java组合算法详解 在Java编程语言中,组合算法是一种常用的数据处理方法,尤其是在需要从一组数据中选取特定数量元素的场景下。本篇文章将基于提供的代码片段来深入探讨组合算法的基本原理、实现方式以及其背后...

    Java排列组合算法 - 郭睿的专栏 - CSDN博客

    Java排列组合算法 - 郭睿的专栏 - CSDN博客Java排列组合算法 - 郭睿的专栏 - CSDN博客

    gray码生成组合算法的java代码

    本项目"gray码生成组合算法的java代码"是基于Java编程语言实现的,旨在结合组合数学原理生成Gray码。在实际编程中,生成Gray码通常涉及到循环移位和异或操作。下面将详细讲解这个程序可能涉及的知识点: 1. **Java...

    6位数,共有几种排列组合的算法java实现

    6位数,共有几种排列组合的算法,java实现

    1204 Java 遗传算法排课java sqlserver.rar_java排课算法_排课_排课系统java_遗传算法Java

    Java遗传算法排课系统是一种利用遗传算法解决复杂优化问题的软件应用。在教育领域,排课是一个典型的组合优化问题,需要考虑多方面的约束条件,如教师时间冲突、教室容量限制、课程时间安排等。遗传算法作为一种启发...

    Java排列组合算法分析和代码实现

    总之,这个资源包提供了一个很好的平台,让你能够深入理解并实践Java中的排列组合算法。通过学习和理解这些代码,你不仅可以增强算法设计能力,还能提高解决实际编程问题的能力。记得动手实践,结合文档和代码,将...

    高效的java版排列组合算法

    高效的Java版排列组合算法 Java排列组合算法是计算机科学中的一种基本算法,它广泛应用于数据分析、机器学习、人工智能等领域。下面将详细介绍高效的Java版排列组合算法的实现。 一、排列组合算法的概念 排列组合...

    Shamir密钥分享算法java.rar

    在这个Java实现的项目中,"Shamir密钥分享算法java.rar"包含了一个带有GUI图形界面的应用程序。用户可以输入要加密的字符串,设置共享值m(即总共生成的子密钥数量)和门限值n。这些参数决定了密钥的分散方式和重新...

    Java排列组合_组合算法

    在Java中实现组合算法,通常会用到递归方法。递归是一种解决问题的方法,它将问题分解为更小的子问题,直到子问题可以直接求解。在组合问题中,递归的思想是:每次选择一个元素加入组合,然后对剩余的元素继续进行...

    java排列组合算法

    在Java中实现排列组合算法可以帮助我们解决很多实际问题,比如数据排序、数据筛选等。下面将详细介绍排列和组合的基本概念以及在Java中的实现方法。 **排列** 是指从n个不同元素中取出m(m≤n)个元素,按照一定的...

    实现了排列组合算法的类(JAVA).rar

    这个"实现了排列组合算法的类(JAVA).rar"文件提供了一种高效的JAVA实现,可以处理任意类型数组的排列和组合。下面将详细讨论排列组合的基本概念,以及在JAVA中实现这些算法的关键点。 排列是指从n个不同元素中...

    Java排列组合算法

    本文将深入探讨Java中实现排列组合算法的方法,帮助开发者更好地理解和运用这些概念。 排列是有序的选择,而组合是无序的选择。在Java中,我们可以使用递归、回溯法或者迭代的方式来实现这两种算法。下面我们将详细...

    遗传算法java实现

    遗传算法java实现 遗传算法是一种搜索启发式算法,它模拟自然选择和遗传过程,通过选择、交叉、变异等操作来搜索最优解。在交通路线和方式规划问题中,遗传算法可以用来解决 Vehicle Routing Problem(VRP),即...

    多边形填充算法java实现

    在给定的标题“多边形填充算法java实现”中,我们可以推断这是一个Java编程项目,它实现了对多边形内部进行填充的功能。描述中提到的“扫描线算法”是实现这一功能的常见方法,这种方法基于逐行扫描图像并处理与...

    java组合的算法

    本篇文章将深入探讨Java中的组合算法,并通过一个名为"A1.java"的代码示例进行讲解。 组合模式的核心思想是"has-a"关系,即一个对象包含其他对象,这与继承的"is-a"关系不同。在Java中,我们通常通过接口或抽象类来...

    蜂群算法Java代码

    在实际应用中,蜂群算法常用于解决组合优化问题,如旅行商问题、调度问题、网络路由等。 总之,这个Java实现的蜂群算法代码提供了一个学习和应用优化技术的基础平台,对于想要深入理解和利用这种生物启发式算法的人...

    排列组合算法实现

    排列组合算法实现,支持模板类。支持重复数的排列。算法采用递归方法,简单易懂。

    经典算法Java实现

    本资源“经典算法Java实现”为Java学习者和研究人员提供了一套完整的算法实现集合,旨在帮助他们更好地理解和运用这些算法。 一、排序算法 1. 冒泡排序:基础排序算法,通过不断交换相邻的逆序元素来逐步理顺数组...

    SVM 算法java实例

    在Java环境中实现SVM算法,可以借助一些库,如JSvmLib。 JSvmLib是一个基于Java语言的SVM库,它为开发者提供了实现SVM模型的工具,包括训练、预测和调优等操作。这个库通常包含以下关键组成部分: 1. **数据预处理...

    Java麻将算法汇总(胡牌算法、AI算法、查胡算法、评估算法、出牌算法)majiang_algorithm-master.zip

    在Java编程领域,麻将算法是游戏开发中的一个重要组成部分,尤其对于设计复杂的AI系统而言。本压缩包"majiang_algorithm-master.zip"包含了一系列与麻将相关的算法实现,如胡牌算法、AI算法、查胡算法、评估算法和出...

Global site tag (gtag.js) - Google Analytics