算法学习——背包问题解决

本文详细介绍了背包问题的五种解决方案:穷举法、贪心法、动态规划法、回溯法和分支限界法。分析了每种方法的特点、效率以及适用情况,并给出了相应的算法实现和实例。动态规划法具有最优子结构和子问题重叠的特性,时间复杂度为O(nb)。回溯法在最坏情况下时间复杂度为O(2^n),而分支限界法通过增加约束条件优化了回溯法的速度。
摘要由CSDN通过智能技术生成

背包问题不同解决方法的比较分析:给出穷举法、贪心法、动态规划法、回溯、分支限界法的实现,分析特点,比较效率。

1.穷举法分析

格式:

输入要求:

       第一行:物品种类数n 背包容量c

       第二行:可装入物品的重量 m1 m2 m3 ... mn

       第三行:可装入物品的价值 w1 w2 w3 ... wn

输出要求:

       第一行:背包的最大价值

示例:

输入:

5 17

3 4 5 10 8

5 6 10 30 17

输出:

41

代码:          

结果:

分析:该算法的时间复杂度是2^n,算法的效率不高。但穷举算法是一种比较通用的算法,通常在找不到最佳的算法时,采用该算法。

2.贪心法分析

格式:

输入:物品数量n,背包容量M,重量与价值数组w、p

输出:解向量x,最优值opt

              示例:

                     输入:

                            第一行:5 17

                            第二行:3 4 5 10 8

                            第三行:5 6 10 30 17

                     输出:

                            44.875

              核心算法:

将w、p按单位价值非增序排序;

x[1..n]=0;cu=M; opt=0; i=1;

while (i<=n && w[i]<=cu)

     { x[i]=1;cu-=w[i];opt+=p[i]; i++}

if (i<=n) then {x[i]=cu/w[i]; opt+=x[i]*p[i]; }

分析:

贪心法的性质:

指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到。一个问题具有该性质时可用贪心法解决。但是要确定问题是否具有该性质,必须证明每一步贪心选择最终导致问题的整体最优解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值