Permutation and Combination in Java

2025年3月29日 | 阅读 4 分钟

在数学中,排列 (Permutation)组合 (Combination) 是两个重要的概念。排列 是集合元素的各种不同排列方式。排列可以一次取一个元素、一次取若干个元素、一次取所有元素来进行。组合 是从集合中选取元素的不同组合方式,可以一次选取一个、若干个或所有元素。在 Java 中,排列组合 的定义与数学定义相同。

Permutation and Combination in Java

例如,如果我们有一个只包含两个元素的集合,即 XY。排列值为 2,因为只有两种可能的排列方式,即 XYYX。组合值为 1,因为只有一种方式可以选择两个元素,即同时选择它们两个。

排列

Java 中,要获取数组、列表或集合的所有排列以及排列值非常容易。要在 Java 中以编程方式获取排列值,我们使用以下公式:

排列 = fact(n) / fact(n-r);

Permutation and Combination in Java

首先,让我们以排列为例,了解如何在 Java 中以编程方式获取排列值。

PermutationExample.java

输出

Permutation and Combination in Java

描述

在上面的代码中,我们创建了一个名为 PermutationExample 的类来获取排列值。在 PermutationExample 类中,我们创建了一个名为 fact() 的静态方法来计算阶乘。在排列公式中,我们需要计算 nn-r 的阶乘。在 main 方法中,我们创建了一个数字列表并向其中添加了某些元素。我们使用 size() 方法获取列表中的元素数量。我们将 r 设置为常量值 3,即进行排列时选择的项目数。之后,我们使用排列公式,即 fact(n)/fact(n-r),并将结果存储在 result 变量中。最后,我们将最终结果显示给用户。

我们不仅可以找到排列值,还可以获取数组的所有排列。让我们再以排列为例,获取数组元素的所有可能排列。

GetAllPermutations.java

输出

Permutation and Combination in Java

描述

上面的代码使用递归来获取所有排列,因此可能有点难以理解。在上面的代码中,我们创建了 GetAllPermutation 类来获取数组的所有排列。我们创建了一个名为 getPermutations() 的静态方法,在该方法内调用了 helper() 方法。在 helper 方法中,

  1. 我们首先检查位置,以确保该位置是否表示最后一个元素。如果该位置表示最后一个元素,那么就没有什么可以进行排列的了。在这种情况下,我们打印所有数组元素并将控制权传递给 main() 方法。
  2. 如果该位置不表示数组的最后一个元素,我们则交换索引 position 处的元素和索引 i 处的元素。
  3. 交换元素后,我们对子数组 array[position+1….end] 执行递归。
  4. 之后,我们再次交换元素以获得数组的所有排列。

组合 (Combination)

与排列值一样,在 Java 中获取组合值也非常容易,但获取数组、列表和集合元素的所有组合比获取排列要困难得多。要在 Java 中以编程方式获取组合值,我们使用以下公式:

组合 = fact(n) / (fact(r) * fact(n-r));

Permutation and Combination in Java

首先,让我们以组合为例,了解如何在 Java 中以编程方式获取组合值。

CombinationExample.java

输出

Permutation and Combination in Java

描述

在上面的代码中,我们创建了一个名为 CombinationExample 的类来获取组合值。在 CombinationExample 类中,我们创建了一个名为 fact() 的静态方法来计算阶乘。在组合公式中,我们需要计算 n, rn-r 的阶乘。在 main 方法中,我们创建了一个数字列表并向其中添加了某些元素。我们使用 size() 方法获取列表中的元素数量。我们将 r 设置为常量值 2,即一次选择的项目数。之后,我们使用组合公式,即 fact(n) / (fact(r) * fact(n-r)),并将结果存储在 result 变量中。最后,我们将最终结果显示给用户。