今天工作中遇到一个问题需要一个组合数算法。google了一会,没有找到合适的,于是就自己写了一个。主要是用了一个递归算法。发出来分享一下,有用的着的就拿去,觉得写得不好的就拍点砖,提点建议。
import java.util.*;
public class Combination
{
public static void main(String[] args)
{
Vector testData = new Vector(Arrays.asList(1, 2, 3, 4, 5, 6));
Vector results = getAllCombinations(testData);
for(int i=0; i<results.size(); i++)
System.out.println(results.elementAt(i));
}
public static Vector getAllCombinations(Vector data)
{
Vector allCombinations = new Vector();
for(int i=1; i<=data.size(); i++)
{
Vector initialCombination = new Vector();
allCombinations.addAll(getAllCombinations(data, i));
}
return allCombinations;
}
public static Vector getAllCombinations(Vector data, int length)
{
Vector allCombinations = new Vector();
Vector initialCombination = new Vector();
combination(allCombinations, data, initialCombination, length);
return allCombinations;
}
private static void combination(Vector allCombinations, Vector data,
Vector initialCombination, int length)
{
if(length == 1)
{
for(int i=0; i<data.size(); i++)
{
Vector newCombination = new Vector(initialCombination);
newCombination.add(data.elementAt(i));
allCombinations.add(newCombination);
}
}
if(length > 1)
{
for(int i=0; i<data.size(); i++)
{
Vector newCombination = new Vector(initialCombination);
newCombination.add(data.elementAt(i));
Vector newData = new Vector(data);
for(int j=0; j<=i; j++)
newData.remove(data.elementAt(j));
combination(allCombinations, newData, newCombination, length - 1);
}
}
}
}
测试结果:
[1]
[2]
[3]
[4]
[5]
[6]
[1, 2]
[1, 3]
[1, 4]
[1, 5]
[1, 6]
[2, 3]
[2, 4]
[2, 5]
[2, 6]
[3, 4]
[3, 5]
[3, 6]
[4, 5]
[4, 6]
[5, 6]
[1, 2, 3]
[1, 2, 4]
[1, 2, 5]
[1, 2, 6]
[1, 3, 4]
[1, 3, 5]
[1, 3, 6]
[1, 4, 5]
[1, 4, 6]
[1, 5, 6]
[2, 3, 4]
[2, 3, 5]
[2, 3, 6]
[2, 4, 5]
[2, 4, 6]
[2, 5, 6]
[3, 4, 5]
[3, 4, 6]
[3, 5, 6]
[4, 5, 6]
[1, 2, 3, 4]
[1, 2, 3, 5]
[1, 2, 3, 6]
[1, 2, 4, 5]
[1, 2, 4, 6]
[1, 2, 5, 6]
[1, 3, 4, 5]
[1, 3, 4, 6]
[1, 3, 5, 6]
[1, 4, 5, 6]
[2, 3, 4, 5]
[2, 3, 4, 6]
[2, 3, 5, 6]
[2, 4, 5, 6]
[3, 4, 5, 6]
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 6]
[1, 2, 3, 5, 6]
[1, 2, 4, 5, 6]
[1, 3, 4, 5, 6]
[2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6]
分享到:
- 2009-03-05 00:12
- 浏览 1636
- 评论(3)
- 论坛回复 / 浏览 (3 / 7527)
- 查看更多
相关推荐
6位数,共有几种排列组合的算法,java实现
本篇文章将深入探讨Java中的组合算法,并通过一个名为"A1.java"的代码示例进行讲解。 组合模式的核心思想是"has-a"关系,即一个对象包含其他对象,这与继承的"is-a"关系不同。在Java中,我们通常通过接口或抽象类来...
在`Combination.java`文件中,你应该能看到这种位移法的实现,它通过维护一个组合数组,并在每次生成新组合时仅移动少数几位,以达到高效生成组合的目的。 文档`排列.doc`和`位移法实现组合.doc`将提供更详尽的解释...
### Java组合算法详解 在Java编程语言中,组合算法是一种常用的数据处理方法,尤其是在需要从一组数据中选取特定数量元素的场景下。本篇文章将基于提供的代码片段来深入探讨组合算法的基本原理、实现方式以及其背后...
在Java中实现排列组合算法可以帮助我们解决很多实际问题,比如数据排序、数据筛选等。下面将详细介绍排列和组合的基本概念以及在Java中的实现方法。 **排列** 是指从n个不同元素中取出m(m≤n)个元素,按照一定的...
Java常用数值算法集是编程实践中不可或缺的一部分,它们涵盖了数学、统计学和计算机科学中的各种计算方法,用于解决实际问题。这些算法在处理数据、优化计算效率、模拟真实世界现象等方面发挥着重要作用。以下是一些...
本项目"gray码生成组合算法的java代码"是基于Java编程语言实现的,旨在结合组合数学原理生成Gray码。在实际编程中,生成Gray码通常涉及到循环移位和异或操作。下面将详细讲解这个程序可能涉及的知识点: 1. **Java...
本文将详细介绍一个Java实现的自定义加密算法案例,该算法通过组合数字、小写字母、大写字母以及特殊字符来生成加密字符串,并采用随机打乱顺序及添加校验和的方式来增强其安全性。 #### 二、加密算法核心逻辑 1. ...
在Java环境下实现SimHash算法,可以帮助开发者在处理大量文本数据时快速识别重复或相似的信息。 SimHash算法的基本步骤如下: 1. **分词**:首先,我们需要将输入的文本进行分词,将连续的字符序列分割成单独的...
System.out.println("对整数数组进行组合:C(n,n)"); int[] intArray=new int[4]; for(int i=0;i;i++){ intArray[i]=i+1; } System.out.println("对整数数组进行组合:C(4,4)"); Combination ...
JAVA实现可能会用到一个辅助函数来计算组合数,然后通过选择并存储特定数量的元素来生成组合。 3. **泛型支持**:由于描述中提到这个类可以处理任何类型的数组,它很可能使用了JAVA的泛型特性,确保类能在不同数据...
总之,这个Java房贷计算器项目不仅是一个实用工具,也是学习和实践Java编程、金融算法以及软件工程的好例子。通过深入研究和理解,开发者可以提升自己的编程技能,同时对金融领域有更深入的认识。
在Java编程中,解决这类问题通常会涉及到数据结构和算法的应用,如贪心算法、动态规划等。 在给定的"java装载问题算法"中,我们可以假设文件"Load.java"包含了用于解决这个问题的代码实现。通常,这样的代码会包含...
在Java中,我们可以构建这样的算法来搜索最佳解决方案,适用于诸如组合优化、参数调优、机器学习模型训练等多个领域。 遗传算法的基本步骤包括初始化种群、选择、交叉和变异。下面将详细介绍这些步骤: 1. **初始...
这个名为“Java经典算法源码实例”的资源集合提供了一系列用Java语言实现的常见算法,对于深入理解算法原理、提高编程技能以及优化代码性能具有极大的帮助。下面,我们将详细探讨这些算法及其应用。 1. **排序算法*...
在Java中实现LSB算法,主要是通过修改图像像素的最低有效位来嵌入和提取隐藏信息。以下是对该算法及其Java实现的详细解释。 **LSB算法原理** LSB算法基于数字二进制表示,其核心思想是利用图像每个像素点颜色值的...
排列组合算法实现,支持模板类。支持重复数的排列。算法采用递归方法,简单易懂。
在"遗传算法JAVA程序"这个实例中,我们可以学习到如何用Java实现遗传算法的基本步骤: 1. **编码表示**:首先,我们需要定义问题的解空间,即如何用二进制或十进制等编码方式来表示个体。例如,如果问题是求解一个...
紧接着,我们要介绍的是水仙花数算法。水仙花数是一个特殊三位数,它的每个位上的数字的立方和等于它本身。这个算法通过for循环来遍历100到999的所有数字,并分解出个位、十位、百位数字,通过组合它们的立方和来...
总的来说,Java实现的中文分词SimHash算法结合了Sanford分词库的分词功能和SimHash的相似度检测,为中文文本的相似度分析提供了一种高效且准确的方法。在实际应用中,这种技术广泛应用于搜索引擎的去重、推荐系统、...