注意:这是背包问题而不是0-1背包问题,背包问题可以用贪心算法进行贪心算法求解背包问题但0-1无法用贪心算法贪心算法求解背包问题,需要用动态规划算法贪心算法求解背包问题;
首先对贪心算法做一下总结以及它与动态规划算法的区别:
贪心算法两个最重要的性质:
(2)最优子结构性质;
其中,貪心选择性质:自顶向下进行决策每次做出的决策都是局部最优解,且每次做出决策后问题规模都变小了;最优子结构性质:即问题的朂优解结构中包含子问题的最优解;
动态规划算法的两个最重要的性质:
(1)重叠子问题性质;
(2)最优子结构性质;
其中最优解子结构性质和贪心算法相似唯一不同的是重叠子问题性质,因为动态规划算法是自底向上的算法它需要首先将原始问题分解为若干个相互有聯系的子问题,在计算的时候有的子问题可能会被计算很多次所以动态规划算法会将这些子问题的解存在一个表格中,使得最终对于这些子问题只需要贪心算法求解背包问题一次(可以使原来需要再指数时间内解决的问题可以在多项式问题中得到解决)
背包问题贪心算法求解背包问题代码如下:
(其中使用的排序算法基于合并排序算法)
//背包问题使用贪心算法进行贪心算法求解背包问题 //n是物体的种类数,M是背包容量v是每类物体的价值,w是每类物体的重量,x是每类物体装入的份额属于[0,1]
参考《计算机算法基础》华中科技大学版
1. 带有限期和收益的单位时间的作业排序贪心算法
通过上机实验要求掌握贪心算法的问题描述、算法设计思想、程序设计。
将物品装入背包并使得其价值最大
背包问题类似,所不同的是在选择物品
装入背包时可以選择物
的一部分,而不一定要全部装入背包
首先将单位重量的平均价值排序。
根据背包容量依次将平均价值高的物品放入背包中
)首先计算每种物品单位重量的价值
)依贪心选择策略,将尽可能多的单位重量价值最高的物品装入背包;
)若将这种物品全部装入背包后褙包内的物品总重量未超过
单位重量价值次高的物品并尽可能多地装入背包;
)依此策略一直地进行下去,直到背包装满为止
该变量数組用来记录排好序之后的物品是否被
定义一个数组用来保存以前的编号及重量,用
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。