类 CombinatoricsUtils
java.lang.Object
org.hipparchus.util.CombinatoricsUtils
组合实用工具。
-
嵌套类概要
嵌套类 -
字段概要
字段 -
方法概要
修饰符和类型方法说明static longbellNumber(int n) 计算贝尔数(集合的分区数)。static longbinomialCoefficient(int n, int k) static doublebinomialCoefficientDouble(int n, int k) static doublebinomialCoefficientLog(int n, int k) 返回n选k的自然对数的log,即从n个元素集合中选择k个元素子集的数量。static voidcheckBinomial(int n, int k) 检查二项式的前提条件。static Iterator<int[]> combinationsIterator(int n, int k) 返回一个迭代器,其范围是{0,...,n-1}的k元素子集,表示为int[]数组。static longfactorial(int n) 返回n的阶乘。static doublefactorialDouble(int n) 计算n的阶乘。static doublefactorialLog(int n) 计算n的阶乘的自然对数。partitions(List<T> list) 生成列表的分区流。permutations(List<T> list) 生成列表的排列流。static longstirlingS2(int n, int k)
-
字段详细资料
-
MAX_BELL
public static final int MAX_BELL适合长整型的贝尔数的最大索引。- 从以下版本开始:
- 2.2
- 另请参阅:
-
-
方法详细资料
-
binomialCoefficient
public static long binomialCoefficient(int n, int k) throws MathIllegalArgumentException, MathRuntimeException 返回n个元素集合中可以选择k个元素子集的二项式系数的精确表示,即"n选k"。前提条件:
0 <= k <= n(否则会抛出MathIllegalArgumentException)- 结果足够小,可以适应
long。所有系数都< Long.MAX_VALUE的最大n值为66。如果计算的值超过Long.MAX_VALUE,则会抛出MathRuntimeException。
- 参数:
-
n- 集合的大小 -
k- 要计数的子集的大小 - 返回:
-
n选k - 抛出:
-
MathIllegalArgumentException- 如果n < 0。 -
MathIllegalArgumentException- 如果k > n。 -
MathRuntimeException- 如果结果太大,无法用长整型表示。
-
binomialCoefficientDouble
public static double binomialCoefficientDouble(int n, int k) throws MathIllegalArgumentException, MathRuntimeException 返回double表示的n选k的二项式系数,即"n选k",即从n个元素集合中选择k个元素子集的数量。* 前提条件:
0 <= k <= n(否则会抛出IllegalArgumentException)- 结果足够小,可以适应
double。所有系数都< Double.MAX_VALUE的最大n值为1029。如果计算的值超过Double.MAX_VALUE,则返回Double.POSITIVE_INFINITY。
- 参数:
-
n- 集合的大小 -
k- 要计数的子集的大小 - 返回:
-
n选k - 抛出:
-
MathIllegalArgumentException- 如果n < 0。 -
MathIllegalArgumentException- 如果k > n。 -
MathRuntimeException- 如果结果太大,无法用长整型表示。
-
binomialCoefficientLog
public static double binomialCoefficientLog(int n, int k) throws MathIllegalArgumentException, MathRuntimeException 返回n选k的自然log,即从n个元素集合中选择k个元素子集的数量。* 前提条件:
0 <= k <= n(否则会抛出MathIllegalArgumentException)
- 参数:
-
n- 集合的大小 -
k- 要计数的子集的大小 - 返回:
-
n选k - 抛出:
-
MathIllegalArgumentException- 如果n < 0。 -
MathIllegalArgumentException- 如果k > n。 -
MathRuntimeException- 如果结果太大,无法用长整型表示。
-
factorial
返回n的阶乘。简写为n的阶乘,即数字1,...,n的乘积。* 前提条件:
n >= 0(否则会抛出MathIllegalArgumentException)- 结果足够小,可以适应
long。所有系数都不超过Long.MAX_VALUE的最大n值为20。如果计算的值超过Long.MAX_VALUE,则会抛出MathRuntimeException。
- 参数:
-
n- 参数 - 返回:
-
n! - 抛出:
-
MathRuntimeException- 如果结果太大,无法用long表示。 -
MathIllegalArgumentException- 如果n < 0。 -
MathIllegalArgumentException- 如果n > 20:阶乘值太大,无法适应long。
-
factorialDouble
计算n的阶乘。即n的阶乘,即数字1到n的乘积,作为double返回。结果应该足够小,可以适应double:所有n的最大值,使n!不超过Double.MAX_VALUE的值为170。如果计算的值超过Double.MAX_VALUE,则返回Double.POSITIVE_INFINITY。- 参数:
-
n- 参数。 - 返回:
-
n! - 抛出:
-
MathIllegalArgumentException- 如果n < 0。
-
factorialLog
计算n的阶乘的自然对数。- 参数:
-
n- 参数。 - 返回:
-
log(n!) - 抛出:
-
MathIllegalArgumentException- 如果n < 0。
-
stirlingS2
public static long stirlingS2(int n, int k) throws MathIllegalArgumentException, MathRuntimeException 返回第二类Stirling数,"S(n,k)",将一个n元素集合分成k个非空子集的方法数。前提条件是
0 <= k <= n(否则会抛出MathIllegalArgumentException异常)- 参数:
-
n- 集合的大小 -
k- 非空子集的数量 - 返回:
-
S(n,k) - 抛出:
-
MathIllegalArgumentException- 如果k < 0。 -
MathIllegalArgumentException- 如果k > n。 -
MathRuntimeException- 如果发生溢出,通常是因为n超过25且k在20到n-2之间(S(n,n-1)是特殊处理的,不会溢出)
-
combinationsIterator
返回一个迭代器,其范围是{0, ..., n - 1}的k元素子集,表示为int[]数组。迭代器返回的数组按降序排序,按从右到左的字典顺序访问。例如,combinationsIterator(4, 2)返回一个迭代器,将在对
next()进行连续调用时生成以下数组序列:[0, 1], [0, 2], [1, 2], [0, 3], [1, 3], [2, 3]如果
k == 0,则返回一个包含空数组的迭代器,如果k == n,则返回一个包含[0, ..., n -1]的迭代器。- 参数:
-
n- 从中选择子集的集合的大小。 -
k- 要枚举的子集的大小。 - 返回:
-
一个
iterator,用于枚举n中的k个集合。 - 抛出:
-
MathIllegalArgumentException- 如果n < 0。 -
MathIllegalArgumentException- 如果k > n。
-
checkBinomial
检查二项式前提条件。- 参数:
-
n- 集合的大小。 -
k- 要计数的子集的大小。 - 抛出:
-
MathIllegalArgumentException- 如果n < 0。 -
MathIllegalArgumentException- 如果k > n。
-
bellNumber
public static long bellNumber(int n) 计算贝尔数(集合的分区数)。- 参数:
-
n- 集合的元素数量 - 返回:
- 贝尔数 Bₙ
- 从以下版本开始:
- 2.2
-
partitions
生成列表的分区流。此方法实现了B. Djokić、M. Miyakawa、S. Sekiguchi、I. Semba和I. Stojmenović在《Short Note: A Fast Iterative Algorithm for Generating Set Partitions》中描述的迭代算法(The Computer Journal,Volume 32,Issue 3,1989,Pages 281–282,https://doi.org/10.1093/comjnl/32.3.281
- 类型参数:
-
T- 列表元素的类型 - 参数:
-
list- 要分区的列表 - 返回:
- 列表的分区流,每个分区都是部分数组,每个部分都是元素列表
- 从以下版本开始:
- 2.2
-
permutations
生成列表的排列流。此方法实现了带有Even's speedup的Steinhaus–Johnson–Trotter算法Steinhaus–Johnson–Trotter算法
- 类型参数:
-
T- 列表元素的类型 - 参数:
-
list- 要排列的列表 - 返回:
- 列表的排列流
- 从以下版本开始:
- 2.2
-