Package org.apache.commons.math3.util
Class CombinatoricsUtils
java.lang.Object
org.apache.commons.math3.util.CombinatoricsUtils
Combinatorial utilities.
- Since:
- 3.3
-
Method Summary
Modifier and TypeMethodDescriptionstatic long
binomialCoefficient
(int n, int k) Returns an exact representation of the Binomial Coefficient, "n choose k
", the number ofk
-element subsets that can be selected from ann
-element set.static double
binomialCoefficientDouble
(int n, int k) Returns adouble
representation of the Binomial Coefficient, "n choose k
", the number ofk
-element subsets that can be selected from ann
-element set.static double
binomialCoefficientLog
(int n, int k) Returns the naturallog
of the Binomial Coefficient, "n choose k
", the number ofk
-element subsets that can be selected from ann
-element set.static void
checkBinomial
(int n, int k) Check binomial preconditions.static Iterator
<int[]> combinationsIterator
(int n, int k) Returns an iterator whose range is the k-element subsets of {0, ..., n - 1} represented asint[]
arrays.static long
factorial
(int n) Returns n!.static double
factorialDouble
(int n) static double
factorialLog
(int n) Compute the natural logarithm of the factorial ofn
.static long
stirlingS2
(int n, int k) Returns the Stirling number of the second kind, "S(n,k)
", the number of ways of partitioning ann
-element set intok
non-empty subsets.
-
Method Details
-
binomialCoefficient
public static long binomialCoefficient(int n, int k) throws NotPositiveException, NumberIsTooLargeException, MathArithmeticException Returns an exact representation of the Binomial Coefficient, "n choose k
", the number ofk
-element subsets that can be selected from ann
-element set.Preconditions:
-
0 <= k <= n
(otherwiseMathIllegalArgumentException
is thrown) - The result is small enough to fit into a
long
. The largest value ofn
for which all coefficients are< Long.MAX_VALUE
is 66. If the computed value exceedsLong.MAX_VALUE
aMathArithMeticException
is thrown.
- Parameters:
n
- the size of the setk
- the size of the subsets to be counted- Returns:
n choose k
- Throws:
NotPositiveException
- ifn < 0
.NumberIsTooLargeException
- ifk > n
.MathArithmeticException
- if the result is too large to be represented by a long integer.
-
-
binomialCoefficientDouble
public static double binomialCoefficientDouble(int n, int k) throws NotPositiveException, NumberIsTooLargeException, MathArithmeticException Returns adouble
representation of the Binomial Coefficient, "n choose k
", the number ofk
-element subsets that can be selected from ann
-element set.Preconditions:
-
0 <= k <= n
(otherwiseIllegalArgumentException
is thrown) - The result is small enough to fit into a
double
. The largest value ofn
for which all coefficients are less than Double.MAX_VALUE is 1029. If the computed value exceeds Double.MAX_VALUE, Double.POSITIVE_INFINITY is returned
- Parameters:
n
- the size of the setk
- the size of the subsets to be counted- Returns:
n choose k
- Throws:
NotPositiveException
- ifn < 0
.NumberIsTooLargeException
- ifk > n
.MathArithmeticException
- if the result is too large to be represented by a long integer.
-
-
binomialCoefficientLog
public static double binomialCoefficientLog(int n, int k) throws NotPositiveException, NumberIsTooLargeException, MathArithmeticException Returns the naturallog
of the Binomial Coefficient, "n choose k
", the number ofk
-element subsets that can be selected from ann
-element set.Preconditions:
-
0 <= k <= n
(otherwiseMathIllegalArgumentException
is thrown)
- Parameters:
n
- the size of the setk
- the size of the subsets to be counted- Returns:
n choose k
- Throws:
NotPositiveException
- ifn < 0
.NumberIsTooLargeException
- ifk > n
.MathArithmeticException
- if the result is too large to be represented by a long integer.
-
-
factorial
Returns n!. Shorthand forn
Factorial, the product of the numbers1,...,n
.Preconditions:
-
n >= 0
(otherwiseMathIllegalArgumentException
is thrown) - The result is small enough to fit into a
long
. The largest value ofn
for whichn!
does not exceed Long.MAX_VALUE} is 20. If the computed value exceedsLong.MAX_VALUE
anMathArithMeticException
is thrown.
- Parameters:
n
- argument- Returns:
n!
- Throws:
MathArithmeticException
- if the result is too large to be represented by along
.NotPositiveException
- ifn < 0
.MathArithmeticException
- ifn > 20
: The factorial value is too large to fit in along
.
-
-
factorialDouble
Compute n!, the factorial ofn
(the product of the numbers 1 to n), as adouble
. The result should be small enough to fit into adouble
: The largestn
for whichn!
does not exceedDouble.MAX_VALUE
is 170. If the computed value exceedsDouble.MAX_VALUE
,Double.POSITIVE_INFINITY
is returned.- Parameters:
n
- Argument.- Returns:
n!
- Throws:
NotPositiveException
- ifn < 0
.
-
factorialLog
Compute the natural logarithm of the factorial ofn
.- Parameters:
n
- Argument.- Returns:
n!
- Throws:
NotPositiveException
- ifn < 0
.
-
stirlingS2
public static long stirlingS2(int n, int k) throws NotPositiveException, NumberIsTooLargeException, MathArithmeticException Returns the Stirling number of the second kind, "S(n,k)
", the number of ways of partitioning ann
-element set intok
non-empty subsets.The preconditions are
0 <= k <= n
(otherwiseNotPositiveException
is thrown)- Parameters:
n
- the size of the setk
- the number of non-empty subsets- Returns:
S(n,k)
- Throws:
NotPositiveException
- ifk < 0
.NumberIsTooLargeException
- ifk > n
.MathArithmeticException
- if some overflow happens, typically for n exceeding 25 and k between 20 and n-2 (S(n,n-1) is handled specifically and does not overflow)- Since:
- 3.1
-
combinationsIterator
Returns an iterator whose range is the k-element subsets of {0, ..., n - 1} represented asint[]
arrays.The arrays returned by the iterator are sorted in descending order and they are visited in lexicographic order with significance from right to left. For example, combinationsIterator(4, 2) returns an Iterator that will generate the following sequence of arrays on successive calls to
next()
:[0, 1], [0, 2], [1, 2], [0, 3], [1, 3], [2, 3]
If
k == 0
an Iterator containing an empty array is returned and ifk == n
an Iterator containing [0, ..., n -1] is returned.- Parameters:
n
- Size of the set from which subsets are selected.k
- Size of the subsets to be enumerated.- Returns:
- an
iterator
over the k-sets in n. - Throws:
NotPositiveException
- ifn < 0
.NumberIsTooLargeException
- ifk > n
.
-
checkBinomial
public static void checkBinomial(int n, int k) throws NumberIsTooLargeException, NotPositiveException Check binomial preconditions.- Parameters:
n
- Size of the set.k
- Size of the subsets to be counted.- Throws:
NotPositiveException
- ifn < 0
.NumberIsTooLargeException
- ifk > n
.
-