`

高效算法取全组合,java版

阅读更多
博客上看到的一个算法,用Java实现了一个,转载而来

算法描述:
算法说明:当n大于2时,n个数的全组合一共有(2^n)-1种。 只是,这个算法n>32时就不适合了。

当对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位,再右移回来就可以了。

算法实现:

Java代码
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("");  
        }  
 
    }  
分享到:
评论

相关推荐

    组合数学全排列算法(转)

    根据提供的信息来看,实际文章内容并未直接包含关于组合...不同的全排列算法各有优缺点,选择合适的算法取决于具体的应用场景和需求。通过深入理解这些算法的工作原理及其适用范围,可以更好地利用它们解决实际问题。

    JAVA算法题目集合.pdf

    这个文件中的Java算法题目集合涵盖了多个经典算法和编程问题,适合用来提升编程能力和算法理解。以下是对这些题目知识点的详细解释: 1. **最大公约数与最小公倍数**:求两个数的最大公约数(GCD)和最小公倍数...

    多态蚁群算法——java版

    ### 多态蚁群算法——Java版 #### 引言 多态蚁群算法是一种受自然界蚂蚁觅食行为启发的优化算法。它主要用于解决复杂的组合优化问题,如旅行商问题(TSP)等。该算法的核心思想是模拟蚂蚁群体在寻找食物过程中通过...

    Java版七种排序算法.pdf

    Java七种排序算法详解 Java排序算法是计算机科学中的一种基本算法,用于对数据进行排序。...Java七种排序算法都是常用的排序算法,每种算法都有其优缺点,选择合适的排序算法取决于具体的应用场景。

    java 扑克牌24点算法

    ### Java扑克牌24点算法解析 #### 一、算法背景与目标 24点游戏是一种数字游戏,玩家需要利用给定的四个数字通过加、减、乘、除(可加括号)来使得最终计算结果等于24。在本算法实现中,使用Java语言编写了一个简单...

    Java 算法源码集合

    Java算法源码集合是一个汇集了各种经典算法实现的资源库,旨在帮助开发者加深对算法的理解,提高编程技能。源码中的实现可能来自网络上的不同来源,因此可能存在一些错误或不完善之处,但在学习和实践中,我们可以...

    排序算法_java

    在编程领域,排序算法是计算机科学中的重要组成部分,特别是在数据处理和数据...而面对大量数据,归并排序或快速排序等高效算法会是更好的选择。理解并掌握这些排序算法,能够帮助我们编写出更高效、更具优化的代码。

    贪心算法java实现.docx

    然而,并非所有的优化问题都能通过贪心策略找到全局最优解,贪心算法的有效性取决于问题本身的特性。 #### 二、贪心算法的应用场景 贪心算法适用于以下几种情况: - 当问题具有“贪心选择性质”:即某一步做出的...

    java排序算法汇总

    在编程领域,排序算法是数据处理的核心部分,尤其是在Java这样的高级语言中。本文将深入探讨在给定的压缩包文件中涉及的几种经典排序算法,包括归并排序、快速排序、简单选择排序、插入排序、冒泡排序、希尔排序以及...

    分支界限思想解0-1背包算法

    0-1背包问题是一种经典的组合优化问题,在计算机科学和运筹学中有着广泛的应用。它描述的是这样的场景:我们有一组物品,每种物品都有一个重量和价值,我们需要选择一部分物品放入一个容量有限的背包中,使得放入...

    组合排列组合排列组合排列组合排列

    在编程领域,组合排列是数据结构与算法中的一个重要概念,主要涉及到如何从一个给定的元素集合中...在实际编程中,应注重算法的效率和代码的可读性,合理运用各种数据结构和设计模式,以实现高效、灵活的组合排列算法。

    java排序算法

    在编程领域,排序算法是数据结构与算法中的基础部分,对于任何编程语言,包括Java,理解和掌握各种排序算法都是非常重要的。排序算法不仅有助于提升代码的效率,还对优化程序性能起到关键作用。以下是对给定的Java...

    Behavior Trees行为树算法

    Unity5.2版本中的Behavior Trees算法提供了高效且灵活的方式来定义复杂的NPC行为逻辑。本篇文章将深入探讨行为树的基本概念、结构和组件,以及如何在Unity中实现。 **1. 行为树基础** 行为树由一系列节点组成,每...

    JAVA归并排序算法.pdf

    归并排序是计算机科学中一种高效的排序算法,采用分治法实现。它的工作原理是将原始数组切分成更小的数组,直到每个小数组只有一个位置,然后将小数组归并成较大的数组,直到最后只有一个排序完毕的数组。归并排序...

    Java 排序算法

    在实际开发中,选择哪种排序算法取决于具体需求,如数据规模、是否稳定、空间复杂度等因素。熟练掌握各种排序算法及其在Java中的实现,能帮助开发者更好地优化程序性能和内存使用。通过阅读源码,可以进一步理解这些...

    A星算法求解旅行商TSP问题

    ### A星算法求解旅行商TSP问题 #### 一、问题背景与描述 旅行商问题(Traveling ...通过对启发式函数的精心设计以及合理选择数据结构,A 星算法能够在较短时间内找到最优解,为解决旅行商问题提供了一种高效的方法。

    遗传算法在排课系统中的应用 遗传与变异

    这一问题本质上属于组合优化问题,且由于其复杂性和约束条件的多样性,传统的方法往往难以高效求解。遗传算法作为一种受到自然界生物进化过程启发的优化技术,因其强大的全局搜索能力和并行处理能力,成为解决这类...

    java程序员面试题算法

    【程序 15】:排序问题,可以使用冒泡排序、选择排序等简单排序算法,这里是最简单的三数取小法,每次比较并交换相邻的两个数,确保每次之后的第一个数都是当前未排序部分的最小值。 【程序 16】:9乘法口诀表,...

    Java写的一个数组的中,m个元素的组合问题

    在编程领域,数组是基本的数据结构之一,用于存储一...理解和掌握如何在Java中高效地解决这类问题对于任何Java开发者来说都是非常重要的技能。通过使用递归和回溯,我们可以生成所有可能的组合,同时保持代码简洁易懂。

Global site tag (gtag.js) - Google Analytics