在 Java 中計算二項式係數
本文將介紹兩個流行的 Java 庫,我們可以使用它們來計算二項式係數。
二項式係數
二項式係數也稱為 n choose r
或 choose(n, r)
(有時是 n choose k
),始終是整數。隨著 n
的增加,它們迅速增長到較大的值,並且 r
既不接近 1
也不接近 n
。
但是,程式語言只能使用它們的整數資料型別來表示有限範圍內的整數。
因此,軟體庫將二項式係數作為整數返回,僅達到一個限制。對於較大的 n
值,他們使用將二項式係數作為 double
資料型別的十進位制值返回的方法。
在 Java 中使用 CERN 的 Colt 庫計算二項式係數
CERN 的 colt 庫的 binomial()
函式可用於計算二項式係數。這個庫總是隻返回 double
型別的十進位制值。
在示例中,n
和 r
的值是硬編碼的;這些可以根據需要進行更改,或者可以修改程式以接受使用者輸入。
示例程式碼:
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
類,它返回 n
的 long
型別整數,最大為 66
。
對於較大的 n
值,我們需要使用同一包中的 BinomialCoefficientDouble
類。
這兩種方法都在下面給出的程式碼段中進行了演示。n
和 r
值在示例中是硬編碼的。
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
我們可以從輸出中看到,對於使用的特定 n
和 r
,此類返回一個精確整數而不是四捨五入的小數。
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
函式。