程序包 org.hipparchus.util

类 CombinatoricsUtils

java.lang.Object
org.hipparchus.util.CombinatoricsUtils

public final class CombinatoricsUtils extends Object
组合实用工具。
  • 字段详细资料

    • MAX_BELL

      public static final int MAX_BELL
      适合长整型的贝尔数的最大索引。
      从以下版本开始:
      2.2
      另请参阅:
  • 方法详细资料

    • binomialCoefficient

      public static long binomialCoefficient(int n, int k) throws MathIllegalArgumentException, MathRuntimeException
      返回n个元素集合中可以选择k个元素子集的二项式系数的精确表示,即"nk"。

      前提条件

      • 0 <= k <= n (否则会抛出MathIllegalArgumentException
      • 结果足够小,可以适应long。所有系数都 < Long.MAX_VALUE的最大n值为66。如果计算的值超过Long.MAX_VALUE,则会抛出MathRuntimeException
      参数:
      n - 集合的大小
      k - 要计数的子集的大小
      返回:
      nk
      抛出:
      MathIllegalArgumentException - 如果n < 0
      MathIllegalArgumentException - 如果k > n
      MathRuntimeException - 如果结果太大,无法用长整型表示。
    • binomialCoefficientDouble

      public static double binomialCoefficientDouble(int n, int k) throws MathIllegalArgumentException, MathRuntimeException
      返回double表示的nk二项式系数,即"nk",即从n个元素集合中选择k个元素子集的数量。

      * 前提条件

      • 0 <= k <= n (否则会抛出IllegalArgumentException
      • 结果足够小,可以适应double。所有系数都 < Double.MAX_VALUE的最大n值为1029。如果计算的值超过Double.MAX_VALUE,则返回Double.POSITIVE_INFINITY
      参数:
      n - 集合的大小
      k - 要计数的子集的大小
      返回:
      nk
      抛出:
      MathIllegalArgumentException - 如果n < 0
      MathIllegalArgumentException - 如果k > n
      MathRuntimeException - 如果结果太大,无法用长整型表示。
    • binomialCoefficientLog

      public static double binomialCoefficientLog(int n, int k) throws MathIllegalArgumentException, MathRuntimeException
      返回nk的自然log,即从n个元素集合中选择k个元素子集的数量。

      * 前提条件

      • 0 <= k <= n (否则会抛出MathIllegalArgumentException
      参数:
      n - 集合的大小
      k - 要计数的子集的大小
      返回:
      nk
      抛出:
      MathIllegalArgumentException - 如果n < 0
      MathIllegalArgumentException - 如果k > n
      MathRuntimeException - 如果结果太大,无法用长整型表示。
    • factorial

      public static long factorial(int n) throws MathIllegalArgumentException
      返回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

      public static double factorialDouble(int n) throws MathIllegalArgumentException
      计算n的阶乘。即n阶乘,即数字1到n的乘积,作为double返回。结果应该足够小,可以适应double:所有n的最大值,使n!不超过Double.MAX_VALUE的值为170。如果计算的值超过Double.MAX_VALUE,则返回Double.POSITIVE_INFINITY
      参数:
      n - 参数。
      返回:
      n!
      抛出:
      MathIllegalArgumentException - 如果n < 0
    • factorialLog

      public static double factorialLog(int n) throws MathIllegalArgumentException
      计算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

      public static Iterator<int[]> combinationsIterator(int n, int k)
      返回一个迭代器,其范围是{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

      public static void checkBinomial(int n, int k) throws MathIllegalArgumentException
      检查二项式前提条件。
      参数:
      n - 集合的大小。
      k - 要计数的子集的大小。
      抛出:
      MathIllegalArgumentException - 如果n < 0
      MathIllegalArgumentException - 如果k > n
    • bellNumber

      public static long bellNumber(int n)
      计算贝尔数(集合的分区数)。
      参数:
      n - 集合的元素数量
      返回:
      贝尔数 Bₙ
      从以下版本开始:
      2.2
    • partitions

      public static <T> Stream<List<T>[]> partitions(List<T> list)
      生成列表的分区流。

      此方法实现了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

      public static <T> Stream<List<T>> permutations(List<T> list)
      生成列表的排列流。

      此方法实现了带有Even's speedup的Steinhaus–Johnson–Trotter算法Steinhaus–Johnson–Trotter算法

      类型参数:
      T - 列表元素的类型
      参数:
      list - 要排列的列表
      返回:
      列表的排列流
      从以下版本开始:
      2.2