示例#1
0
 public Permutation(IEnumerable <T> source, int length, CombinatoricModel model)
 {
     if (length < 0)
     {
         throw new ArgumentOutOfRangeException("length", "length must be greater than or equal to 0");
     }
     _source   = source;
     _length   = length;
     _model    = model;
     _comparer = EqualityComparer <T> .Default;
 }
示例#2
0
        //constructors

        //static methods
        static long count(IEnumerable <T> source, int length, CombinatoricModel model)
        {
            switch (model)
            {
            case CombinatoricModel.Normal:
                return(Combinatoric.FallingFactorial((long)source.Count(), length));

            case CombinatoricModel.Repetition:
                return(((long)source.Count()).Power(length));

            case CombinatoricModel.Distinct:
                var lookup = source.ToLookup(x => x);
                return(distinctCount(lookup.Select(x => x.LongCount()).OrderBy(x => x).ToList(), length, lookup.Count, source.Count() - length));

            case CombinatoricModel.RepetitionDistinct:
                return(source.Distinct().LongCount().Power(length));

            default:
                return(0L);
            }
        }
示例#3
0
 public static Combination <T> Combine <T>(this IEnumerable <T> source, int length, CombinatoricModel model)
 {
     return(new Combination <T>(source, length, model));
 }