zoukankan      html  css  js  c++  java
  • 高效率的全组合算法(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("");
            }
    
        }
    }

     

  • 相关阅读:
    无密码登录Linux
    php生成压缩包
    验证数字的正则表达式集
    初识MEF
    实现Linq.Distinct方法
    《Windows Internal》(2)
    《Windows Internals》(1)
    使用MEF宿主在一个应用程序上
    mysql错误记录集合
    python基本知识之数据类型
  • 原文地址:https://www.cnblogs.com/zlingh/p/4040742.html
Copyright © 2011-2022 走看看