`
mtnt2008
  • 浏览: 362816 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

高效率的全组合算法(Java版实现)

阅读更多

 

博客上看到的一个算法,用Java实现了一个

 

算法描述:

 

算法说明:当n大于2时,n个数的全组合一共有(2^n)-1种。

当对n个元素进行全组合的时候,可以用一个n位的二进制数表示取法。

1表示在该位取,0表示不取。例如,对ABC三个元素进行全组合,  100表示取A,010表示取B,001表示取C,101表示取AC  110表示取AB,011表示取BC,111表示取ABC

注意到表示取法的二进制数其实就是从1到7的十进制数 

推广到对n个元素进行全排列,取法就是从1到2^n-1的所有二进制形式 

要取得2^n,只需将0xFFFFFFFF左移32-n位,再右移回来就可以了。

 

算法实现:

 

package com.set.test;

public class SetTest {

	public static void main(String[] args) {

		String str[] = { "A", "B", "C", "D", "E" };

		int nCnt = str.length;

		int nBit = (0xFFFFFFFF >>> (32 - nCnt));

		for (int i = 1; i <= nBit; i++) {
			for (int j = 0; j < nCnt; j++) {
				if ((i << (31 - j)) >> 31 == -1) {
					System.out.print(str[j]);
				}
			}
			System.out.println("");
		}

	}
}
 

 

 

分享到:
评论
2 楼 sybell 2014-01-28  
1楼的要多循环一次的,结果却一样。
1 楼 yangguo 2010-09-25  
楼主比较蛋疼,代码绕着来写。还有不要在java界搞匈牙利命名法则。

 String str[] = { "A", "B", "C", "D", "E" };  
				int nCnt = str.length;

//				int nBit = (0xFFFFFFFF >>> (32 - nCnt));

				int nBit = 1<<nCnt;

				for (int i = 1; i <= nBit; i++) {
					for (int j = 0; j < nCnt; j++) {
						if ((1<<j & i ) != 0) {
							System.out.print(str[j]);
						}
					}
					System.out.println("");
				}

相关推荐

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

    所使用的算法应该是效率最高的算法,而且这两个类都只是对需要排列组合的数组的下标进行处理,所以能对任何类型的数组进行排列组合。

    高效的java版排列组合算法

    主要为大家详细介绍了高效的java版排列组合算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    基于Misty1算法的加密软件(JAVA)的实现(源代码+lw).zip

    通过以上技术选择和框架搭建,该项目可以实现一个高性能、可扩展性强的Web应用程序。开发人员可以基于框架提供的功能和组件进行快速开发,减少重复代码的编写,提高开发效率。同时,使用MySQL作为数据存储,可以保证...

    java笔试题算法-csa-challenge:比较连接扫描算法的各种实现

    java笔试题算法CSA挑战 在Captain Train,我们需要计算列车路线以找到与不同列车运营商的最佳组合。 我们的核心路由引擎是用 C++ 编写的,基于连接扫描算法。 我们进行了很多对话,既有巨魔,也有对路由如何工作的...

    JAVA基于遗传算法的中药药对挖掘系统的设计与实现(源代码+lw).zip

    通过以上技术选择和框架搭建,该项目可以实现一个高性能、可扩展性强的Web应用程序。开发人员可以基于框架提供的功能和组件进行快速开发,减少重复代码的编写,提高开发效率。同时,使用MySQL作为数据存储,可以保证...

    JEAF:Java 进化算法框架

    JAVA进化算法框架(JEAF)是工程研究综合... 效率:进化算法很耗时,尤其是当它们应用于某些工程领域时,如果我们将 Java 与 C 或 C++ 进行比较,那么选择 Java 已经产生了负面影响。 因此,我们谨慎地做出了一些决定,

    高效算法:竞赛、应试与提高必修128例.[法] Christoph Dürr Jill-Jênn Vie(带书签文字版).pdf

    本书旨在探讨如何优化算法效率,详细阐述了经典算法和特殊算法的实现、应用技巧和复杂度验证过程,内容由浅入深,能帮助读者快速掌握复杂度适当、正确率高的高效编程方法以及自检、自测技巧,是参加ACM ICPC、Google...

    JAVA基于蚁群算法路由选择可视化动态模拟(lw+开题报告+翻译+任务书+外文翻译).zip

    通过以上技术选择和框架搭建,该项目可以实现一个高性能、可扩展性强的Web应用程序。开发人员可以基于框架提供的功能和组件进行快速开发,减少重复代码的编写,提高开发效率。同时,使用MySQL作为数据存储,可以保证...

    java笔试题算法-concolic-walk:ConcolicWalk启发式求解复杂算术路径条件的实现和评估数据

    java笔试题算法求解复杂算术路径条件的 Concolic Walk Heuristic 此存储库包含 Java 符号执行引擎的修改版本。 修改后的版本实现了 Peter Dinges 和 Gul Agha 论文中描述的启发式方法,该论文在 . 存储库还包含用于...

    java 面试题 总结

    但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地...

    基于java编程语言初中生学科题库设计和试卷批改系统的毕业设计实现.zip

    本文介绍的是一种基于 Java 编程语言的初中生学科题库设计和试卷批改系统的毕业设计实现。该系统旨在为初中学生提供高质量的试卷,并为老师们提供一个自动批改试卷的工具,从而提高教学效率。 该系统的设计包括两个...

    java 设计模式资料

    附件中是java实现全部的设计模式,包含代码和工程(jbuilder工程),值得收藏. 此目录里包括了一书中所有23种设计模式的实现(Java 版)源码 关于代码的几点说明: 1. 代码为根据个人对Design Pattern的学习理解写...

    整理后java开发全套达内学习笔记(含练习)

    进行高精度运算可以用java.math包中BigDecimal类中的方法。 自动类型提升又称作隐式类型转换。 强制类型转换:int ti; (byte) ti ; 强制转换,丢弃高位 宣告变量名称的同时,加上“final”关键词来限定,这个...

    涵盖了90%以上的面试题

    在ArrayList和LinkedList尾部添加元素,谁的效率更高 如果HashMap或者hashTable的key是一个自定义的类该怎么办 为什么重写equals还要重写hashCode? 介绍一下volatile jdk1.5新特性 jdk1.7新特性 jdk1.8新特性 java...

    超级有影响力霸气的Java面试题大全文档

    但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地...

    二十三种设计模式【PDF版】

    在浏览《Thingking in Java》(第一版)时,你是不是觉得好象这还是一本 Java 基础语言书籍?但又不纯粹是,因为这本书的作 者将面向对象的思想巧妙的融合在 Java 的具体技术上,潜移默化的让你感觉到了一种新的语言...

    Python访问Mysql数据库

    它有高效率的高层数据结构,简单而有效 地实现面向对象编程。Python 简洁的语法和对动态输入的支持, 再加上解释性语言的本质,使得它在大多数平台上的许多领域都 是一个理想的脚本语言,特别适用于快速的应用程序...

    Python语言程序设计习题答案.zip

    由于大数据专业学生对程序设计的要求不是很高,但又需要具备一定的计算思维能力,熟悉用程序进行数据分析的一般流程,因此程序设计教材要言不甚深、文不甚俗,既要覆盖相关技术,又不能面面俱到,注重对问题的分析和...

    asp.net知识库

    #实现的18位身份证格式验证算法 身份证15To18 的算法(C#) 一组 正则表达式 静态构造函数 忽略大小写Replace效率瓶颈IndexOf 随机排列算法 理解C#中的委托[翻译] 利用委托机制处理.NET中的异常 与正则表达式相关的几...

    Python语言程序设计PPT课件.zip

    由于大数据专业学生对程序设计的要求不是很高,但又需要具备一定的计算思维能力,熟悉用程序进行数据分析的一般流程,因此程序设计教材要言不甚深、文不甚俗,既要覆盖相关技术,又不能面面俱到,注重对问题的分析和...

Global site tag (gtag.js) - Google Analytics