| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 【趣学算法】Day3 贪心算法——背包问题 -> 正文阅读 |
|
[数据结构与算法]【趣学算法】Day3 贪心算法——背包问题 |
14天阅读挑战赛
目录 题目描述
问题分析(1)每次选择价值最大的物品装入背包。 (2)每次选择重量最小的物品装入背包。 (3)每次选择单位重量价值最大的物品转入背包。 ??????? 思考一下,如果选价值最大的物品,但重量非常大,则可能一个也装不下,分割一部分装入,价值未必是最高的;如果选重量最小的物品装入,则其价值不一定高,所以在总重量受到限制的情况下无法保证价值最大;而如果每次选单位重量价值最大的物品,则装满背包后一定能得到最大价值。 ??????? 因此,我们应采用第三种贪心策略——每次从剩下的物品中选单位重量价值最大的物品。 算法设计?(1)确定合适的数据结构并初始化。首先将物品的重量、价值和单位重量价值定位为一种结构体类型,然后对物品按单位重量价值从大到小进行排序。 (2)根据贪心策略,按照单位重量价值从大到小选取物品,直到达到背包容量。如果在装入第 i 个物品时超出背包容量,则取该物品的一部分装入背包。 完美图解??????? 物品的价值和重量如表2-3所示。如果背包容量 w = 30,怎么才能装入最大价值的物品? ??????????????????????????????????????????????????????????????? 物品清单
(1)贪心策略是每次选单位重量价值(价值/重量)大的物品,因此可以按单位重量价值对物品进行降序排列,排序后的物品清单如下所示: ???????????????????????????????????????????????????????? 排序后的物品清单
?(2)按照贪心策略,每次选择单位重量价值大的物品装入背包。 (3)构造最优解 算法详解(1)确定合适的数据结构。
(2)对物体按单位重量价值进行排序。
(3)使用贪心算法求解问题
算法分析(1)时间复杂度:时间主要耗费在对物品按单位重量价值进行排序上,一般采用快速排序法,时间复杂度为O(nlogn)。 (2)空间复杂度:空间主要消耗在存储物品的单位重量价值上,空间复杂度为O(n)。 ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ?????? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 20:25:29- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |