当前位置:首页 » 《随便一记》 » 正文

【趣学算法】Day3 贪心算法——背包问题

26 人参与  2022年11月08日 13:53  分类 : 《随便一记》  评论

点击全文阅读


14天阅读挑战赛
努力是为了不平庸~
算法学习有些时候是枯燥的,这一次,让我们先人一步,趣学算法!

 ❤️一名热爱Java的大一学生,希望与各位大佬共同学习进步❤️

?个人主页:@周小末天天开心

各位大佬的点赞? 收藏⭐ 关注✅,是本人学习的最大动力

感谢!

?该篇文章收录专栏—趣学算法

目录

题目描述

问题分析

算法设计 

完美图解

算法详解

(1)确定合适的数据结构。

(2)对物体按单位重量价值进行排序。

(3)使用贪心算法求解问题

算法分析


题目描述

        有n种物品,每种物品只有一个,第i种物品的重量为 wi,价值为 vi,背包的容量为 w,物品可以分割。如何放置物品,使装入背包的物品价值之和最大?

问题分析

(1)每次选择价值最大的物品装入背包。

(2)每次选择重量最小的物品装入背包。

(3)每次选择单位重量价值最大的物品转入背包。

        思考一下,如果选价值最大的物品,但重量非常大,则可能一个也装不下,分割一部分装入,价值未必是最高的;如果选重量最小的物品装入,则其价值不一定高,所以在总重量受到限制的情况下无法保证价值最大;而如果每次选单位重量价值最大的物品,则装满背包后一定能得到最大价值。

        因此,我们应采用第三种贪心策略——每次从剩下的物品中选单位重量价值最大的物品。

算法设计 

(1)确定合适的数据结构并初始化。首先将物品的重量、价值和单位重量价值定位为一种结构体类型,然后对物品按单位重量价值从大到小进行排序。

(2)根据贪心策略,按照单位重量价值从大到小选取物品,直到达到背包容量。如果在装入第 i 个物品时超出背包容量,则取该物品的一部分装入背包。

完美图解

        物品的价值和重量如表2-3所示。如果背包容量 w = 30,怎么才能装入最大价值的物品?

                                                                物品清单

物品 i312345678910
重量 w[i]4295585455
价值 v[i]3818682056715

(1)贪心策略是每次选单位重量价值(价值/重量)大的物品,因此可以按单位重量价值对物品进行降序排列,排序后的物品清单如下所示:

                                                         排序后的物品清单

物品 i21063589471
重量 w[i]2589545554
价值 v[i]8152018867653
单位重量价值432.521.61.51.41.210.75

 (2)按照贪心策略,每次选择单位重量价值大的物品装入背包。

(3)构造最优解

算法详解

(1)确定合适的数据结构。

struct node {    double w; //每种物品的重量    double v; //每种物品的价值    double p; //每种物品的单位重量价值(价值/重量)}

(2)对物体按单位重量价值进行排序。

bool cmp(node a, node b) { //自定义比较函数cmp    return a.p > b.p; // 指定按照物品的单位重量价值进行降序排列}sort(s, s + n, cmp); //前两个参数分别为待排序数组的首地址和尾地址,cmp为比较函数

(3)使用贪心算法求解问题

double solve (int n, double w) {    double sum = 0.0;    //sum表示已经装入物品的价值之和    double cleft = w;    //背包的剩余容量    for(int i = 0; i < n; i++) {    //是用贪心算法求解问题        if(s[i].w < cleft) {    //如果物品的重量小于或等于剩余容量            cleft -= s[i].w;            sum += s[i].v;        }        else {    //如果物品的重量大于剩余容量            sum += cleft * s[i].p;    //部分装入            break;        }    }    return sum;}

算法分析

(1)时间复杂度:时间主要耗费在对物品按单位重量价值进行排序上,一般采用快速排序法,时间复杂度为O(nlogn)。

(2)空间复杂度:空间主要消耗在存储物品的单位重量价值上,空间复杂度为O(n)。                                                                                                                                               


点击全文阅读


本文链接:http://m.zhangshiyu.com/post/47458.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 他的干妹妹怀孕后,我闪婚了文集(林诺陆深)全书免费_(林诺陆深)他的干妹妹怀孕后,我闪婚了文集后续(林诺陆深)
  • 江先生,你要听话列表列表_江先生,你要听话列表(许清欢江砚舟)
  • 一抹斜阳相思泪后续+必读夏知微陆远川完本_一抹斜阳相思泪后续+必读(夏知微陆远川)
  • 「不当假少爷后,我娶了首富当老婆」免费试读_萧寒沈凌薇章节多结局预体验‌
  • 全书浏览我死后,数万网友对我进行审判火爆(董天华尹瑶)_我死后,数万网友对我进行审判火爆(董天华尹瑶)全书结局
  • 纨绔恶少抽盲盒选妻子,我换嫁绝嗣总裁后他发疯求原谅+免费+后续列表_纨绔恶少抽盲盒选妻子,我换嫁绝嗣总裁后他发疯求原谅+免费+后续(阮玉绵)
  • 完结文晚云为落日溺亡++后续列表_完结文晚云为落日溺亡++后续(裴念舒)
  • [修仙:我在云疆养仙蚕]章节多结局预体验‌_「林珂」小说无删减版在线阅读
  • 全书浏览我死后,数万网友对我进行审判++番外(董天华尹瑶)_我死后,数万网友对我进行审判++番外(董天华尹瑶)全书结局
  • 被兄弟俩接连当工具人后,我杀疯了后续+(贺云舟)全书免费_(贺云舟)被兄弟俩接连当工具人后,我杀疯了后续+后续(贺云舟)
  • [发现装穷老公的真面目后,我迎来美好人生]反转剧情碎片化试读_傅思瀚方知晓晓晓完结
  • 完结文未婚夫求我放过他,换掉联姻对象后他却傻眼了。列表_完结文未婚夫求我放过他,换掉联姻对象后他却傻眼了。(傅深)

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1