编写 Python 程序查找完美和2024 年 8 月 29 日 | 4 分钟阅读 在本教程中,我们将编写 Python 程序来查找给定列表中的完美和。让我们先理解问题陈述。 问题陈述给定一个由非负整数组成的数组 arr[] 和一个整数 sum,任务是计算给定数组中和等于给定 sum 的所有子集的数量。例如 - 示例 - 2 解决方案 -我们可以使用递归和动态规划来解决这个问题。让我们先理解递归方法。 方法 1:使用递归在此方法中,我们将使用递归函数,该函数将考虑给定数组的所有子集,并检查每个子集的和是否等于给定的和。我们将使用记忆化来避免重复计算。让我们理解下面的示例。 示例 - 输出 3 解释 - 在上面的代码中,我们定义了一个递归函数 `count_subsets_recursive(arr, n, sum, memo)`,其中 `arr` 是给定的数组,`n` 是数组中的元素数量,`sum` 是目标和,`memo` 是用于存储中间结果的记忆化表。 递归的基线情况是当和为 0 时。在这种情况下,我们返回 1,因为总有一个空子集,其和为 0。 如果元素数量为 0 且和不为 0,我们返回 0,因为没有子集的和等于给定的和。 对于其他情况,我们有两种选择:要么将当前元素 `arr[n-1]` 包含在子集中,要么排除它。 如果我们排除它,我们就对剩余的 n-1 个元素递归调用 `count_subsets_recursive()` 函数,即 `count_subsets_recursive(arr, n-1, sum, memo)`。 如果我们包含它,我们就对剩余的 n-1 个元素和减去当前元素后的剩余和递归调用 `count_subsets_recursive()` 函数,即 `count_subsets_recursive(arr, n-1, sum-arr[n-1], memo)`。 我们将上述两种选择的结果相加,并将结果存储在记忆化表中以避免重复计算。最后,我们返回结果。 方法 2:使用动态规划在此方法中,我们将使用动态规划,其中我们定义一个二维数组 `dp[n+1][sum+1]`,其中 `dp[i][j]` 表示数组前 i 个元素的子集中和等于 j 的数量。 让我们来理解以下代码—— 示例 - 输出 3 解释 - 在此方法中,我们创建一个大小为 (n+1) x (sum+1) 的二维数组 `dp`,其中 `n` 是数组中的元素数量,`sum` 是目标和。每个元素 `dp[i][j]` 表示数组前 i 个元素中和等于 j 的所有子集的计数。我们将数组的第一列初始化为 1,因为总有一个空子集,其和为 0。我们使用以下递归关系。 第一种情况代表当前元素 `arr[i-1]` 大于当前和 `j` 的情况。在这种情况下,我们不能将当前元素包含在任何和等于 `j` 的子集中。因此,我们只需复制 `dp[i-1][j]` 的值。 第二种情况代表当前元素 `arr[i-1]` 小于或等于当前和 `j` 的情况。在这种情况下,我们可以选择将当前元素包含在子集中,也可以选择排除它。 如果我们排除它,则和等于 `j` 的子集的计数将与从前 i-1 个元素形成的和等于 `j` 的子集的计数相同。如果我们包含它,我们需要找到从前 i-1 个元素形成的和等于 `j-arr[i-1]` 的子集的计数,因为我们已经包含了当前元素 `arr[i-1]`。 最后,我们返回 `dp[n][sum]` 的值,它表示整个数组中和等于给定和的所有子集的计数。 |
Python 是用途最广泛、最流行的编程语言。它是初学者的推荐语言;即使经验丰富的程序员也在学习 Python。Python 使任务变得简单,并以几行代码完成它,而其他编程语言需要很多行。选择...
阅读 2 分钟
Mahotas 是一个用于 Python 的开源计算机视觉库,提供了广泛的图像处理功能。Mahotas 提供的一个功能是从图像中提取 Haralick 特征的能力。Haralick 特征是基于灰度共生矩阵的纹理特征……
阅读 3 分钟
递归是编程解决问题的重要概念之一。每个初学者都会遇到递归,甚至有经验的开发人员也会使用递归。如果您不熟悉递归,它是一个调用自身的函数。例如 - 放置两面平行的镜子相对……
阅读 8 分钟
在本教程中,我们将学习一个有趣的 Python 库,名为 holidays,它用于确定给定年份特定日期的假期。它返回给定日期的特定结果。我们只需要传递国家名称。然而,它只能...
阅读 4 分钟
Python被认为是一种极其灵活的编程语言,拥有广泛的库,它是一种高级语言,语法易于阅读和编写。Python的应用范围正在不同领域扩展,如机器学习、Web开发、网络安全、应用程序开发等等...
阅读 8 分钟
二进制语言是计算机的语言。计算机的所有内部机制都与位有关。位运算符是允许程序员对整数执行位操作的一组运算符。这些运算符允许程序员操作较低级别的数据,在...
阅读 3 分钟
数据科学在每个电子商务业务中的著名用途之一是推荐系统。为了增加时尚领域的销售额和用户参与度,一家电子商务公司希望向其用户推荐最流行的时尚。Myntra 是著名的电子商务网站之一,以其......而闻名。
阅读 22 分钟
? 在 Python 中逐行读取文件是许多数据处理和分析工作流程中的常见操作。以下是您可遵循的步骤来逐行读取 Python 文件: 1. 打开文件:打开所需文件是第一步。要...
阅读 4 分钟
在本教程中,我们将讨论 Python 装饰器的一个高级概念。我们假设您对 Python 装饰器有基本的了解。如果没有,您可以从 Python 装饰器教程中学习。什么是记忆化?在学习记忆化之前,让我们简要了解一下...
阅读 2 分钟
大数据、数据科学和集群处理最流行的两种编程语言是 Python 和 Scala。Python 是一种高级的面向对象解释型编程语言。它是一种动态结构化编程语言。它支持多种编程框架,包括面向对象、函数式和过程式模型,...
阅读 3 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India