箱子装箱问题.pptx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
箱子装箱问题

箱子装箱问题6班李康201400301237问题描述:在箱子装载问题中,有若干个容量为c的箱子和n个待装载入箱子中的物品。物品i需占s[i]个单元(0s[i]≤c)。所谓成功装载(feasiblepacking),是指能把所有物品都装入箱子而不溢出,而最优装载(optimalpacking)则是指使用了最少箱子的成功装载。四种求解算法:(1)最先匹配法(FirstFit,FF)物品按1,2,,n的顺序装入箱子。假设箱子从左至右排列。每一物品i放入可盛载它的最左箱子。(2)最优匹配法(BestFit,BF)设cAvail[j]为箱子j的可用容量。初始时,所有箱子的可负载容量为c。物品i放入具有最小cAvail且容量大于s[i]的的箱子中。(3)最先匹配递减法(FirstFitDecreasing,FFD)此方法与FF类似,区别在于各物品首先按容量递减的次序排列,即对于l≤in,有s[i]≥s[i+1]。(4)最优匹配递减法(BestFitDecreasing,BFD)此法与BF相似,区别在于各物品首先按容量递减的次序排列,即对于l≤in,有s[i]≥s[i+1]。竞赛树(FF、FFD)竞赛树是一类完全二叉树,分为赢者树和输者树。赢者树就是在每一个内部节点中记录比赛赢的一方,输者树就是记录输的一方。竞赛树的外部节点就是所有参加比赛的选手,其上一层为第一轮比赛赢或输的选手……赢者树类定义classWinnerTree{public: WinnerTree(intTreeSize=10); ~WinnerTree(){delete[]t;} voidInitialize(Ta[],intsize,int(*winner)(Ta[],intb,intc));//初始化 intWinner()const{return(n)?t[1]:0;} intWinner(inti)const{return(in)?t[i]:0;} voidRePlay(inti,int(*winner)(Ta[],intb,intc));//成员改变时voidFirstFitPack(ints[],intn,intc);//最先匹配算法private: intMaxSize; intn;//当前大小 intLowExt;//最底层的外部节点 intoffset;//2^k-1 int*t; T*e;//元素数组树与数组的对应关系FF算法:voidWinnerTreeT::FirstFitPack(ints[],intn,intc){//箱子容量c,物品数量n,s【】为各物品所需要的空间int(*winner)(Ta[],intb,intc);WinnerTreeint*W=newWinnerTreeint(n);int*avail=newint[n+1];//初始化n个箱子和赢者树for(inti=1;i=n;i++)avail[i]=c;//初始化可用的容量W-Initialize(avail,n,winner);//将物品放入箱子中for(inti=1;i=n;i++){intp=2;while(pn){intwinp=W-Winner(p);if(avail[winp]s[i])p++;p*=2;}intb;p/=2;if(pn){b=W-Winner(p);if(b1avail[b-1]=s[i])b--;}elseb=W-Winner(p/2);coutPackobjectiinbinbendl;avail[b]-=s[i];W-RePlay(b,winner);}}Avl树(BF、BFD):AVL树是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下都是O(logn)。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。高度为h的AVL树,节点数N最多2^h−1;最少N(h)=N(h−1)+N(h−2)+1。Avl树类定义:classavl_tree{public:voidBestFitPack(ints[],intn,intc);avl_tree(){head=NULL;}boolFindGE(constTk,TKout)const;boolinsert(nodeT*q,Te);//插入节点boolremove(nodeT*q,Te);//删除节点voidprint(nodeT*q,intlevel);//格式化打印树voidmiddle_visit(nodeT*q);//中序遍历nodeT*get_head(){returnhead;}//返回根节点的引用,注意是引用最优匹配寻找箱子示例:寻找最优箱子算法:boolavl_treeT::FindGE(cons

文档评论(0)

119220 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档