ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:221.72KB ,
资源ID:29605136      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/29605136.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(背包问题不同算法设计分析与对比.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

背包问题不同算法设计分析与对比.docx

1、背包问题不同算法设计分析与对比-本页仅作为预览文档封面,使用时请删除本页-01背包问题不同算法设计、分析与对比(总15页)实验三 01背包问题不同算法设计、分析与对比一问题描述给定n种物品和一背包。物品i的重量是wi,其价值为vi,背包的容量为c。问题:应如何选择装入背包中的物品,使得装入背包中物品的总价值最大。说明:在选择装入背包的物品时,对每种物品i只有两个选择,装入背包或不装入背包,也不能将物品装入背包多次。二实验内容与要求实验内容:1.分析该问题适合采用哪些算法求解(包括近似解)。 动态规划、贪心、回溯和分支限界算法。2.分别给出不同算法求解该问题的思想与算法设计,并进行算法复杂性分析

2、。动态规划:递推方程:m(i,j) = maxm(i-1,j),m(i-1,j-wi)+vi j = wi; m(i-1,j) j wi; 时间复杂度为O(n).贪心法: 算法思想:贪心原则为单位价值最大且重量最小,不超过背包最大承重量为约束条件。也就是说,存在单位重量价值相等的两个包,则选取重量较小的那个背包。但是,贪心法当在只有在解决物品可以分割的背包问题时是正确的。贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择。 用贪心法设计算法的特点是一步一步地进行,根据某个优化测度(可能是目标函数,也可能不是目标函数),每一步上

3、都要保证能获得局部最优解。每一步只考虑一个数据,它的选取应满足局部优化条件。若下一个数据与部分最优解连在一起不再是可行解时,就不把该数据添加到部分解中,直到把所有数据枚举完,或者不能再添加为止。回溯法: 回溯法:为了避免生成那些不可能产生最佳解的问题状态,要不断地利用限界函数(bounding function)来处死那些实际上不可能产生所需解的活结点,以减少问题的计算量。这种具有限界函数的深度优先生成法称为回溯法。 对于有n种可选物品的0/1背包问题,其解空间由长度为n的0-1向量组成,可用子集数表示。在搜索解空间树时,只要其左儿子结点是一个可行结点,搜索就进入左子树。当右子树中有可能包含最

4、优解时就进入右子树搜索。时间复杂度为:O(2n)空间复杂度为:O(n)分支限界算法: 首先,要对输入数据进行预处理,将各物品依其单位重量价值从大到小进行排列。在优先队列分支限界法中,节点的优先级由已装袋的物品价值加上剩下的最大单位重量价值的物品装满剩余容量的价值和。 算法首先检查当前扩展结点的左儿子结点的可行性。如果该左儿子结点是可行结点,则将它加入到子集树和活结点优先队列中。当前扩展结点的右儿子结点一定是可行结点,仅当右儿子结点满足上界约束时才将它加入子集树和活结点优先队列。当扩展到叶节点时为问题的最优值。3.设计并实现所设计的算法。4.对比不同算法求解该问题的优劣。 这动态规划算法和贪心算

5、法是用来分别解决不同类型的背包问题的,当一件背包物品可以分割的时候,使用贪心算法,按物品的单位体积的价值排序,从大到小取即可。 当一件背包物品不可分割的时候,(因为不可分割,所以就算按物品的单位体积的价值大的先取也不一定是最优解)此时使用贪心是不对的,应使用动态规划。 设计方法时间复杂度优点缺点动态规划Minnc,2n可求得最优决策序列速度慢贪心方法O(2n)速度较快很难得到最优解回溯法O(n2n)能够得到最优解时间复杂度较高分支限界法O(2n)速度较快,易求解占用内存大,效率不高5.需要提交不同算法的实现代码和总结报告。动态规划方法:public class Knapsack public

6、static void main(String args) int value = 0, 60, 100, 120 ; int weigh = 0, 10, 20, 30 ; int weight = 50; Knapsack1(weight, value, weigh); public static void Knapsack1(int weight, int value, int weigh) int v = new int; int w = new int; int c = new intweight + 1; int d = new int 100; for (int i = 0; i

7、 ; i+) vi = valuei; wi = weighi; for (int i = 1; i ; i+) for (int k = 1; k = weight; k+) if (wi j i : j; return k; 贪心法:public class GreedyKnapSack public static void main(String args) int value = 0, 60, 100, 120 ; int weigh = 0, 10, 20, 30 ; int weight = 50; Knapsack1(weight, value, weigh); private

8、static void Knapsack1(int weight, int v, int w) int n = ; double r = new doublen; int index = new intn; for(int i = 0;i n; i+) ri = (double)vi / (double)wi; indexi = i; /按单位重量价值ri=vi/wi降序排列 double temp = 0; for(int i = 0;i n-1;i+) for(int j = i+1;j n;j+) if(ri rj) temp = ri; ri = rj; rj = temp; int

9、x = indexi; indexi = indexj; indexj = x; /排序后的重量和价值分别存到w1和v1中 int w1 = new intn; int v1 = new intn; for(int i = 0;i n;i+) w1i = windexi; v1i = vindexi; (w1); (v1); int s=0;/包内现存货品的重量 int value=0;/包内现存货品总价值 for(int i = 0; i n;i+) if(s + w1i weight) value += v1i; s += w1i; 背包中物品的最大总价值为 + value); 回溯法:p

10、ublic class BacktrackKnapSack public static void main(String args) int value = 0, 60, 100, 120 ; int weigh = 0, 10, 20, 30 ; int weight = 50; Knapsack1(weight, value, weigh); private static void Knapsack1(int weight, int v, int w) int n = ; double r = new doublen; int index = new intn; for(int i = 0

11、;i n; i+) ri = (double)vi / (double)wi; indexi = i; /按单位重量价值ri=vi/wi降序排列 double temp = 0; for(int i = 0;i n-1;i+) for(int j = i+1;j n;j+) if(ri rj) temp = ri; ri = rj; rj = temp; int x = indexi; indexi = indexj; indexj = x; /排序后的重量和价值分别存到w1和v1中 int w1 = new intn; int v1 = new intn; for(int i = 0;i =

12、 0) if(CurrentWeight + w1i weight) CurrentWeight += w1i; CurrentValue += v1i; i+; else break; if(i n) maxValue = CurrentValue; 1背包中物品的最大总价值为 + maxValue); 分支限界算法:package bag01b;import class bag01do public static void main(String args) / TODO Auto-generated method stub ArrayList objects=new ArrayList(

13、); (new object(10,60); (new object(20,100); (new object(30,120); bag b=new bag(50,objects); (); (); -package bag01b;import class bag private int bagv; private ArrayList objects; private int maxvalue; private ArrayList result_objects; public bag(int v,ArrayList o) super(); =v; =o; =0; =null; (objects

14、); public void show() maxvalue :+ ; the object when maxvalue:+; public void findmaxvalue() PriorityQueue enode=new PriorityQueue(); Node node=new Node(0,null,bagv,; (node); while(true) if() break; node=(); if() =(); =new ArrayList(); return; int i=(); object iobject= if()+()= ArrayList newnodeinbag=

15、new ArrayList(); (iobject); int newnodebagv=()(); Node newnode=new Node(i+1,newnodeinbag,newnodebagv,; (newnode); if() =(); =new ArrayList(); Node newnode=new Node(i+1,(),(),; if() (newnode); -package bag01b;import class Node implements Comparable private int node_in; private ArrayList inbag_object;

16、 private ArrayList outbag_object; private int leftv; private int prio; public Node(int i,ArrayList in,int l,ArrayList out) super(); =i; if(in=null) in=new ArrayList(); =in; =l; =out; =(); private int find_prio() / TODO Auto-generated method stub int bag_left=; int p=(); int i=; object iobject=null;

17、while(true) if(i= break; iobject= if()bag_left) break; bag_left-=(); p+=(); i+; if(i return -1; if return 1; return 0; public boolean isend() if= return true; else return false; public ArrayList get_in_bag_object() return ; public int get_node_in()return ; public int get_bag_leftv()return ; public i

18、nt get_bag_prio()return ; public String toString() return node in+node prio+; -package bag01b;public class object implements Comparable private static int ids=1; private int id; private int weihgt; private int value; public object(int w,int v) super(); =w; =v; =ids+; public int getid()return ; public int getweight()return ; public int getvalue()return ; public float getvw()return (float); Override public int compareTo(object o) / TODO Auto-generated method stub if()() return -1; if()() return 1; return 0; public String toString() return object + ;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1