在 Java 中計算二項式係數

Jesse John 2023年10月12日
  1. 二項式係數
  2. 在 Java 中使用 CERN 的 Colt 庫計算二項式係數
  3. 在 Java 中使用 Apache Commons 數字庫在計算二項式係數
  4. 參考
  5. まとめ
在 Java 中計算二項式係數

本文將介紹兩個流行的 Java 庫,我們可以使用它們來計算二項式係數。

二項式係數

二項式係數也稱為 n choose rchoose(n, r)(有時是 n choose k),始終是整數。隨著 n 的增加,它們迅速增長到較大的值,並且 r 既不接近 1 也不接近 n

但是,程式語言只能使用它們的整數資料型別來表示有限範圍內的整數。

因此,軟體庫將二項式係數作為整數返回,僅達到一個限制。對於較大的 n 值,他們使用將二項式係數作為 double 資料型別的十進位制值返回的方法。

在 Java 中使用 CERN 的 Colt 庫計算二項式係數

CERN 的 colt 庫的 binomial() 函式可用於計算二項式係數。這個庫總是隻返回 double 型別的十進位制值。

在示例中,nr 的值是硬編碼的;這些可以根據需要進行更改,或者可以修改程式以接受使用者輸入。

示例程式碼:

import cern.jet.math.Arithmetic;

class combinatorial {
  public static void main(String args[]) {
    long N = 60, R = 15;
    double chs;
    chs = Arithmetic.binomial(N, R);
    System.out.println(chs);
  }
}

輸出:

5.319408919271999E13

在 Java 中使用 Apache Commons 數字庫在計算二項式係數

Apache Commons Numbers 庫有一個 BinomialCoefficient 類,它返回 nlong 型別整數,最大為 66

對於較大的 n 值,我們需要使用同一包中的 BinomialCoefficientDouble 類。

這兩種方法都在下面給出的程式碼段中進行了演示。nr 值在示例中是硬編碼的。

BinomialCoefficient 的示例程式碼:

import org.apache.commons.numbers.combinatorics.BinomialCoefficient;

public class apa_bincoeff {
  public static void main(String args[]) {
    int N = 60, R = 15;
    long nchr;
    nchr = BinomialCoefficient.value(N, R);
    System.out.println(nchr);
  }
}

輸出:

53194089192720

我們可以從輸出中看到,對於使用的特定 nr,此類返回一個精確整數而不是四捨五入的小數。

BinomialCoefficientDouble 的示例程式碼:

import org.apache.commons.numbers.combinatorics.BinomialCoefficientDouble;

public class apa_binom_dbl {
  public static void main(String args[]) {
    int N = 95, R = 35;
    double nchrd;
    nchrd = BinomialCoefficientDouble.value(N, R);
    System.out.println(nchrd);
  }
}

輸出:

1.2014118724871557E26

參考

對於 Colt 庫,請參見其網站

對於 Apache Commons Number 庫,請參閱包文件

まとめ

對於 66 以內的 n,Apache BinomialCoefficient 類給出一個精確的整數。對於較大的 n,可以使用 Apache 的 BinomialCoefficientDouble 類或 colt 的 binomial 函式。

作者: Jesse John
Jesse John avatar Jesse John avatar

Jesse is passionate about data analysis and visualization. He uses the R statistical programming language for all aspects of his work.

相關文章 - Java Library