/// <summary> /// Returns all k combinations of given set /// </summary> public static List <List <T> > NCombinations(List <T> set, uint k) { int cap = (int)Recursive.Factorial((uint)set.Count) / (int)Recursive.Factorial(k) * (int)Recursive.Factorial((uint)set.Count - k); var results = new List <List <T> >(cap); NCombinationsInner(0, new int[k], set, results); return(results); }
/// <summary> /// Computes factorial of n (complexity O(n)) /// </summary> public static ulong Factorial(uint n) { if (n == 0) { return(1); } return(Recursive.Factorial(n - 1) * n); }