Python中的0/1背包问题2025年1月5日 | 阅读6分钟 在此问题中,我们给出了两个长度为 N 的数组,其中 N 是我们可以使用的物品数量。其中一个数组包含单个物品的利润值,第二个数组包含物品的重量。我们还给出了一个值 W,指定背包的最大容量(按重量计算)。我们的任务是找到装满背包后可能获得的最大利润。该问题之所以命名为 0/1,是因为我们只能选择完整的物品,而不能选择它们的零碎部分。让我们通过一些例子来理解这个问题。 示例 输入: N = 6, W = 50, profit = [5, 1, 7, 9, 4, 6], weight = [10, 20, 30, 11, 25, 20] 输出 20 方法 - 1在此方法中,我们将使用暴力破解技术。我们将生成所有可能的物品子集,并计算所有这些子集的利润。然后,在所有利润值中,我们将找到在给定约束条件下可能获得的最大利润。所有子集物品的总重量应小于 W。 要形成子集,我们有两种情况。要么将当前物品添加到集合中,要么不将当前物品添加到集合中。但是,有三个条件需要检查才能决定这两种情况。 我们将按以下方式进行:
这是上述方法在 Python 中的实现。 代码 输出 20 时间复杂度:在此方法中,我们检查所有可能的结果,从而到达递归树的所有可能分支。因此,此方法的复杂度是指数级的,即 O(2^N)。 辅助空间:我们使用额外的空间来存储递归堆栈;因此,此方法的空间复杂度为 O(N)。 方法 - 2在此方法中,我们将使用动态规划来解决此问题。在上述递归方法中,有许多子问题。为了只解决一次子问题并降低时间复杂度,我们将使用动态规划方法。我们将把子问题的解决方案存储在一个二维数组中。子问题将由两个参数决定。参数是剩余物品的数量和背包当前的重量容量。二维数组将有助于以恒定时间获取子问题的解决方案,而不是以非线性时间解决它们。 以下是上述方法在 Python 中的实现。 代码 输出 20 时间复杂度:动态规划函数的时间复杂度是树的宽度和高度的乘积。因此,此方法的复杂度为 O(N * W)。 辅助空间:此方法的空间复杂度比前一种方法高,因为我们还存储了二维动态规划数组。因此,这次总的空间复杂度将是 O(N * W) + O(N),其中第一部分是由于数组,第二部分是由于递归堆栈。 我们也可以使用循环来解决上述问题。让我们看看循环的代码。 代码 输出 20 此方法的时间和空间复杂度相同。 下一个主题如何将整数转换为罗马数字 |
引言 在数字化转型时代,文件上传已成为 Web 应用程序的基本组成部分。无论是传输客户个人资料图片、提交用于处理的档案,还是在框架之间移动大型数据集,成功且安全地处理文件上传至关重要。Python,一种灵活的...
阅读 6 分钟
在广阔的软件开发领域,数据库在有效存储、处理和检索事实方面发挥着关键作用。数据库基本上是依赖于统计或事实的有序集合,可以轻松访问、管理和更新。数据库的重要性在于...
阅读 19 分钟
在计算机科学和编程领域,布尔逻辑是构建动态过程的基石。在 Python 3 中,布尔逻辑扮演着至关重要的角色,评估程序的进程,评估条件,并启用逻辑运算。本扩展指南旨在...
阅读 6 分钟
手语识别和 Python 入门 由于当前社会沟通依赖于声音传递信息,因此这已被作为优先事项。SLR 代表手语识别,是一个不断发展的领域,涉及...
阅读9分钟
?函数在 Python 中被视为一等对象。在一种语言中,一等对象始终保持一致。数据结构、控制结构和参数传递是它们的一些可能用途。如果一种编程语言将函数视为一等对象,那么它就被认为...
阅读 10 分钟
在 Python 中,集合是用于存储集合的四种内置数据类型之一,另外还有列表、元组和字典。它是一个无序的唯一项集合。集合被认为是可变的,这允许我们在集合创建后添加或删除元素……
7 分钟阅读
? 折线图通常由一些分散的数据列表创建,这会导致图表显示为连接点的直线,或者数据点非常密集,使得绘图显得混乱。matplotlib.pyplot.plot()...
阅读 4 分钟
引言 在创新的 Web 开发领域,应用程序之间的互操作至关重要。Representational State Transfer (REST) API 已成为此类通信的主要媒介,HTTP 方法在此信息流中起着重要作用。在这些方法中,PUT 方法被证明是...
阅读 4 分钟
在下面的教程中,我们将学习如何实现。但在此之前,让我们讨论一下 Quickselect 算法是什么。什么是 Quickselect 算法?一种称为 Quickselect 的选择过程用于识别第 k 个顺序统计量,即数据元素中的最小数据元素...
阅读 3 分钟
Python 提供了命令行界面,用于在运行 Python 程序时控制用户输入和某些类型的数据录入。现在用户可以输入数据并完成原本会很困难的任务。这还使得更复杂的任务和增强的程序交互成为可能。 一个……
5 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India