全组合算法

//全组合算法
        public static List<List<T>> FullCombination<T>(List<T> lstSource)
        {
            var n = lstSource.Count;
            var max = 1 << n;
            var lstResult = new List<List<T>>();
            for (var i = 0; i < max; i++)
            {
                var lstTemp = new List<T>();
                for (var j = 0; j < n; j++)
                {
                    if ((i >> j & 1) > 0)
                    {
                        lstTemp.Add(lstSource[j]);
                    }
                }
                lstResult.Add(lstTemp);
            }
            lstResult.RemoveAt(0);
            return lstResult;
        }

public class test
    {
        public string mountNo;
        public int price = 0;
    }

var lstTest = new List<test>();
            lstTest.Add(new test(){mountNo="A",price=1});
            lstTest.Add(new test() { mountNo = "B", price = 2 });
            lstTest.Add(new test() { mountNo = "C", price = 3 });
            lstTest.Add(new test() { mountNo = "D", price = 4 });
            lstTest.Add(new test() { mountNo = "E", price = 5 });

var lstCombTest = FullCombination(lstTest);

http://www.jb51.net/article/37362.htm

时间: 2024-10-07 04:50:49

全组合算法的相关文章

算法:全组合算法

public static List<int[]> combin(final int TOTAL, final int SELETED) { List<int[]> list = new ArrayList<int[]>(400000); int[] i = new int[SELETED]; for (int x = 1; x <= SELETED; x++) i[x - 1] = x; final int LAST = SELETED - 1; while (

高效率的全组合算法(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的所有二进制形式 要

[LeetCode] Subsets I (78) &amp; II (90) 解题思路,即全组合算法

78. Subsets Given a set of distinct integers, nums, return all possible subsets. Note: Elements in a subset must be in non-descending order. The solution set must not contain duplicate subsets. For example,If nums = [1,2,3], a solution is: [ [3], [1]

java全组合算法

public static void combination(int[] s) { if (s.length == 0) { return; } int len = s.length; int n = 1 << len; // 从1循环到2^len-1 for (int i = 1; i < n; i++) { StringBuffer sb = new StringBuffer(); // 查看第一层循环里面的任意一种取值当中的哪一位是1[比如ab,011], 如果是1,对应的字符就存

算法练习 -- DP C# 实现 全组合算法

const string splitor = "----"; void Main() { var r = Dp(new List<string>(){"a","b","c","d","e","f","g"}); Console.WriteLine(r); //print combosition count var count = 0;

常见算法之全排列 全组合

全排列算法是一种比较常考的算法,他的做法也比较多样. 首先我们来看看最符合我们直观思考的,思路是这样的:假如没有重复元素时,传入一个数组A,并插入到另外一个数组B中,假如B中已经包含这个元素,则跳过,否则插入数组B.我们来看看具体代码: <span style="font-size:14px;">public static void permutation1(final String str, String buffer){ if (str.length() == buff

字符串排列组合算法

第二个算法是我笔试题遇到的,当时没有做出来,在网上看到别人写的算法,感觉太精妙了,就在这里分享出来. 全排列 所谓全排列,就是打印出字符串中所有字符的所有排列.例如输入字符串abc,则打印出 a.b.c 所能排列出来的所有字符串 abc.acb.bac.bca.cab 和 cba . #include<stdio.h> #include<string.h> static int number=0; void Swap(char *a ,char *b) { char temp =

获取所有组合算法、获取全排列算法(java)

转载声明:原文转自:http://www.cnblogs.com/xiezie/p/5574516.html 受到ACM1015的影响,个人感觉,有必要对统计学上的 全组合和全排列 进行一个简单的总结 组合数:从m个不同元素中取出n(n≤m)个元素的所有组合的个数,叫做从m个不同元素中取出n个元素的组合数(Combination). 如1,2,3三个元素的全组合为: 1 2 3 12 13 23 123 以下是java实现的获取全组合及其个数的算法: import java.io.Buffere

中文分词算法 之 基于词典的全切分算法

在使用 基于词典 的分词方法的时候,如果我们解决了下面4个问题: 1.如何把一句话中所有的词找出来呢?只要词典中有就一定要找出来. 2.如何利用1中找出来的词组合成完整的句子?组合成的句子要和原句一样. 3.如何保证2中组合而成的句子包含了所有可能的词序? 4.如何从所有可能的词序中选择最完美的一种作为最终的分词结果? 那么我们的分词方法称之为:基于词典的全切分算法. 下面我们以一个实例来说明,比如句子:中华人民共和国. 假设词典中包含如下词: 中华人民共和国 中华人民 中华 华人 人民共和国