`
logicgate
  • 浏览: 98642 次
  • 性别: Icon_minigender_1
  • 来自: 新力吐皮
社区版块
存档分类
最新评论

Java 组合数算法

    博客分类:
  • Java
阅读更多

今天工作中遇到一个问题需要一个组合数算法。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]
分享到:
评论
3 楼 chaos.wql 2009-03-06  
递归算法........
个人觉得学习尚可,工作中没什么使用价值
2 楼 yangyi 2009-03-05  
var arr = [1,2,3];
globalArray = [];
function cal(array){
	if(array.length == 0)
		return;
	if(globalArray.contains(array.join())){
		return;
	}else{
		globalArray.push(array.join());
	}
	for(var i=0;i<array.length;i++){
		cal(array.except(i));
	}
}

cal(arr);
globalArray.sort();
var str = "";
for(var i=0;i<globalArray.length;i++){
	str += globalArray[i] + "<br/>";
}
document.write(str);


Array.prototype.except = function(i){
	var re = [];
	for(var j=0;j<this.length;j++){
		if(j != i){
			re.push(this[j]);
		}
	}
	return re;
}
Array.prototype.contains = function(o){
	for(var j=0;j<this.length;j++){
		if(this[j] == o){
			return true;
		}
	}
	return false;
}

相关推荐

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

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

    java组合的算法

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

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

    在`Combination.java`文件中,你应该能看到这种位移法的实现,它通过维护一个组合数组,并在每次生成新组合时仅移动少数几位,以达到高效生成组合的目的。 文档`排列.doc`和`位移法实现组合.doc`将提供更详尽的解释...

    java组合算法

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

    java排列组合算法

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

    Java常用数值算法集

    Java常用数值算法集是编程实践中不可或缺的一部分,它们涵盖了数学、统计学和计算机科学中的各种计算方法,用于解决实际问题。这些算法在处理数据、优化计算效率、模拟真实世界现象等方面发挥着重要作用。以下是一些...

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

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

    java自定义加密算法

    本文将详细介绍一个Java实现的自定义加密算法案例,该算法通过组合数字、小写字母、大写字母以及特殊字符来生成加密字符串,并采用随机打乱顺序及添加校验和的方式来增强其安全性。 #### 二、加密算法核心逻辑 1. ...

    simhash-java Java实现simhash算法的简单实现.zip

    在Java环境下实现SimHash算法,可以帮助开发者在处理大量文本数据时快速识别重复或相似的信息。 SimHash算法的基本步骤如下: 1. **分词**:首先,我们需要将输入的文本进行分词,将连续的字符序列分割成单独的...

    经典java组合算法源码--TryCombination(算法源码)

    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).rar

    JAVA实现可能会用到一个辅助函数来计算组合数,然后通过选择并存储特定数量的元素来生成组合。 3. **泛型支持**:由于描述中提到这个类可以处理任何类型的数组,它很可能使用了JAVA的泛型特性,确保类能在不同数据...

    最全房贷计算器 java 代码 含算法

    总之,这个Java房贷计算器项目不仅是一个实用工具,也是学习和实践Java编程、金融算法以及软件工程的好例子。通过深入研究和理解,开发者可以提升自己的编程技能,同时对金融领域有更深入的认识。

    java装载问题算法

    在Java编程中,解决这类问题通常会涉及到数据结构和算法的应用,如贪心算法、动态规划等。 在给定的"java装载问题算法"中,我们可以假设文件"Load.java"包含了用于解决这个问题的代码实现。通常,这样的代码会包含...

    java基因算法源码

    在Java中,我们可以构建这样的算法来搜索最佳解决方案,适用于诸如组合优化、参数调优、机器学习模型训练等多个领域。 遗传算法的基本步骤包括初始化种群、选择、交叉和变异。下面将详细介绍这些步骤: 1. **初始...

    Java经典算法源码实例(Java算法,源码)

    这个名为“Java经典算法源码实例”的资源集合提供了一系列用Java语言实现的常见算法,对于深入理解算法原理、提高编程技能以及优化代码性能具有极大的帮助。下面,我们将详细探讨这些算法及其应用。 1. **排序算法*...

    LSB.zip_Java实现lsb_LSB的java_LSB算法JAVA实现_java实现LSB算法_java实现信息LSB

    在Java中实现LSB算法,主要是通过修改图像像素的最低有效位来嵌入和提取隐藏信息。以下是对该算法及其Java实现的详细解释。 **LSB算法原理** LSB算法基于数字二进制表示,其核心思想是利用图像每个像素点颜色值的...

    排列组合算法实现

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

    遗传算法JAVA程序

    在"遗传算法JAVA程序"这个实例中,我们可以学习到如何用Java实现遗传算法的基本步骤: 1. **编码表示**:首先,我们需要定义问题的解空间,即如何用二进制或十进制等编码方式来表示个体。例如,如果问题是求解一个...

    JAVA经典算法大全(都会就算牛逼的了)

    紧接着,我们要介绍的是水仙花数算法。水仙花数是一个特殊三位数,它的每个位上的数字的立方和等于它本身。这个算法通过for循环来遍历100到999的所有数字,并分解出个位、十位、百位数字,通过组合它们的立方和来...

    java实现中文分词simhash算法

    总的来说,Java实现的中文分词SimHash算法结合了Sanford分词库的分词功能和SimHash的相似度检测,为中文文本的相似度分析提供了一种高效且准确的方法。在实际应用中,这种技术广泛应用于搜索引擎的去重、推荐系统、...

Global site tag (gtag.js) - Google Analytics