类 CombinatoricsUtils
java.lang.Object
org.hipparchus.util.CombinatoricsUtils
组合实用工具。
-
嵌套类概要
-
字段概要
-
方法概要
修饰符和类型方法说明static long
bellNumber
(int n) 计算贝尔数(集合的分区数)。static long
binomialCoefficient
(int n, int k) static double
binomialCoefficientDouble
(int n, int k) static double
binomialCoefficientLog
(int n, int k) 返回n
选k
的自然对数的log
,即从n
个元素集合中选择k
个元素子集的数量。static void
checkBinomial
(int n, int k) 检查二项式的前提条件。static Iterator
<int[]> combinationsIterator
(int n, int k) 返回一个迭代器,其范围是{0,...,n-1}的k元素子集,表示为int[]
数组。static long
factorial
(int n) 返回n
的阶乘。static double
factorialDouble
(int n) 计算n
的阶乘。static double
factorialLog
(int n) 计算n
的阶乘的自然对数。partitions
(List<T> list) 生成列表的分区流。permutations
(List<T> list) 生成列表的排列流。static long
stirlingS2
(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
-