Java 中的排列系数2024年9月10日 | 阅读 9 分钟 排列可以定义为,将给定集合的所有成员排列成一个序列的过程。排列系数用 P(n, r) 表示。它表示从 n 个元素中每次取 r 个元素的排列数。因此,如果我们必须计算 P(5, 2),则表示有 5 个元素(n = 5),并且可以从中取任意 2 个元素(r = 2),任务是找出取这 2 个元素的方法数。在本节中,我们将讨论排列系数及其计算方法。此外,我们还将为此创建一个 Java 程序。 假设这 5 个元素是 1、2、3、4 和 5,我们可以取的 2 个元素是 (1, 2) (1, 3) (1, 4) (1, 5) (2, 1) (2, 3) (2, 4) (2, 5) (3, 1) (3, 2) (3, 4) (3, 5) (4, 1) (4, 2) (4, 3) (4, 5) (5, 1) (5, 2) (5, 3) (5, 5) 如果我们计算提到的对,我们会得到 20。因此,从 5 个元素(1、2、3、4、5)的集合中取这 2 个元素有 20 种方法。 在数学上,我们可以使用以下公式计算 P(n, r) 的值 因此, P(5, 2) = 5! / (5 - 2)! = 5! / 3! = (5 x 4 x 3 x 2 x 1) / (3 x 2 x 1) = 120 / 6 = 20 P(7, 4) = 7! / (7 - 4)! = 7! / 3! = (7 x 6 x 5 x 4 x 3 x 2 x 1) / (3 x 2 x 1) = 5040 / 6 = 840 注意
实施让我们通过一个 Java 程序来计算 P(n, r) 的值。 使用数组文件名: PermCoefficient.java 输出 The value of (7, 4) is: 840 The value of (5, 2) is: 20 时间复杂度:上述程序的复杂度为 O(n + r)。这是因为 findFactorial() 方法中提到的 for 循环执行两次:一次用于值 n,另一次用于值 r。 另一种方法找到 P(n, r) 值的另一种方法如下所述。 P(n, r) = P(n - 1, r) + r x P(n - 1, r - 1) 如果 n < r,则 P(n, r) = 0 并且 P(n, 0) = 1 & P(n, n) = n! & P(n, 1) = n 因此, P(10, 2) = P(10 - 1, 2) + 2 x P(10 - 1, 2 - 1) P(10, 2) = P(9, 2) + 2 x P(9, 1) P(10, 2) = P(9, 2) + 2 x 9 = P(9, 2) + 18 - 方程 A 现在,我们将计算 P(9, 2) 的值 P(9, 2) = P(9 - 1, 2) + 2 x P(9 - 1, 2 - 1) = P(8, 2) + 2 x P(8, 1) - 方程 B = P(8, 2) + 2 x 8 = P(8, 2) + 16 P(8, 2) = P(8 - 1, 2) + 2 x P(8 - 1, 2 - 1) = P(7, 2) + 2 x P(7, 1) = P(7, 2) + 2 x 7 = P(7, 2) + 14 - 方程 C P(7, 2) = P(7 - 1, 2) + 2 x P(7 - 1, 2 - 1) = P(6, 2) + 2 x P(6, 1) = P(6, 2) + 2 x 6 = P(6, 2) + 12 - 方程 D P(6, 2) = P(6 - 1, 2) + 2 x P(6 - 1, 2 - 1) = P(5, 2) + 2 x P(5, 1) = P(5, 2) + 2 x 5 = P(5, 2) + 10 - 方程 E P(5, 2) = P(5 - 1, 2) + 2 x P(5 - 1, 2 - 1) = P(4, 2) + 2 x P(4, 1) = P(4, 2) + 2 x 4 = P(4, 2) + 8 方程 F P(4, 2) = P(4 - 1, 2) + 2 x P(4 - 1, 2 - 1) = P(3, 2) + 2 x P(3, 1) = P(3, 2) + 2 x 3 = P(3, 2) + 6 方程 G P(3, 2) = P(3 - 1, 2) + 2 x P(3 - 1, 2 - 1) = P(2, 2) + 2 x P(2, 1) = 2! + 2 x 2 = 2 x 1 + 2 x 2 = 2 + 4 = 6 将 P(3, 2) 的值代入方程 G,我们得到 P(4, 2) = P(3, 2) + 6 = 6 + 6 = 12 将 P(4, 2) 的值代入方程 F,我们得到 P(5, 2) = P(4, 2) + 8 = 12 + 8 = 20 将 P(5, 2) 的值代入方程 E,我们得到 P(6, 2) = P(5, 2) + 10 = 20 + 10 = 30 将 P(6, 2) 的值代入方程 D,我们得到 P(7, 2) = P(6, 2) + 12 = 30 + 12 = 42 将 P(7, 2) 的值代入方程 C,我们得到 P(8, 2) = P(7, 2) + 14 = 42 + 14 = 56 将 P(8, 2) 的值代入方程 B,我们得到 P(9, 2) = P(8, 2) + 16 = 56 + 16 = 72 将 P(9, 2) 的值代入方程 A,我们得到 P(10, 2) = P(9, 2) + 18 = 72 + 18 = 90 递归方法让我们用递归看看实现。 文件名: PermutationCoeff.java 输出 The Value of P(10, 2) is: 90 The Value of P(7, 3) is: 210 迭代方法-1让我们看看使用嵌套 for 循环和二维数组的实现。 文件名: PermutationCoeff1.java 输出 The Value of P(10, 2) is: 90 The Value of P(7, 3) is: 210 在上面的程序中,我们使用了嵌套 for 循环来计算 P(n, r) 的值。由于嵌套 for 循环,该程序的复杂度为 O(n * r)。空间复杂度也为 O(n * r)。但是,我们可以进行优化,将时间和空间复杂度都降低到 O(n)。 迭代方法-2让我们看看使用单个 for 循环和一维数组的实现。 文件名: PermutationCoeff2.java 输出 The Value of P(10, 2) is: 90 The Value of P(7, 3) is: 210 我们可以进一步优化并将空间复杂度降低到 O(1)。但是,时间复杂度仍然保持不变,即 O(n)。观察以下程序。 迭代方法-3让我们看看使用单个 for 循环的实现。 文件名: PermutationCoeff3.java 输出 The Value of P(10, 2) is: 90 The Value of P(7, 3) is: 210 |
? 在前面的章节中,我们学习了 Apache POI 库。它是一个处理 Microsoft Office 文档的 API。使用 POI 库,我们可以轻松创建 DOC、DOCX、XLS、XLSX、PPT 和 PPTX 文件。如果我们想创建 PDF...
7 分钟阅读
目标是按垂直之字形遍历顺序获得二叉树中各节点的值。树的垂直之字形遍历描述如下:按从右到左的顺序列出第一层的元素;如果没有剩余部分,则移动...
阅读 6 分钟
Java 中 Array 和 ArrayList 之间的区别 Array 和 ArrayList 是众所周知的。数组是 Java 提供的基本功能,而 ArrayList 是 Java Collections 框架的一个类。它属于 java.util 包。Java 数组数组是一个动态创建的对象。它用于...
阅读 3 分钟
称为序列化和反序列化的基本思想用于将 Java 对象转换为一种格式,以便可以快速传输、存储或重新创建。序列化 序列化是将对象转换为字节流的过程,以便它可以跨网络发送,保存在...
阅读 4 分钟
JavaBeans 是 Sun Microsystems 推出的一种组件架构,一直是 Java 开发中构建可重用软件组件的基础。内省是 JavaBeans 中的一个关键概念,它允许开发人员在运行时检查和操作 JavaBean 组件的属性、方法和事件。在本...
阅读 4 分钟
在 Java 中,valueOf() 方法是许多类中定义的静态方法,主要是在原始数据类型(如 Integer、Double、Boolean 等)的包装类中。此方法用于从字符串表示创建相应包装类的对象...
阅读 4 分钟
在动态规划中,有许多算法可以找到图中的最短路径。其中一些是 Dijkstra 算法、BFS、DFS、Floyd、所有对最短路径问题和双向算法。最常用的算法是 Dijkstra 算法。该算法的局限性在于...
5 分钟阅读
在本节中,我们将创建 Java 程序,使用方法和命令行参数查找两个数字的和或加法,三个数字的和,以及 n 个数字的和。Java 中的两个数字相加 在 Java 中,查找两个数字的和...
阅读 6 分钟
在本节中,我们将学习什么是基数,并创建 Java 程序来查找基数。基数程序经常在 Java 编码面试和学术中出现。基数 基数用于表示数量。基数是计数词...
阅读 3 分钟
在本节中,我们将学习什么是数组的平衡索引以及如何通过 Java 程序找到平衡索引。平衡索引 如果较低索引元素的总和等于较高索引元素的总和,则称为平衡索引...
阅读 4 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India