知识大全 贪婪算法之——货箱装船

Posted 重量

篇首语:守株待兔只能得一餐饱,主动出击方能丰衣足食。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 贪婪算法之——货箱装船相关的知识,希望对你有一定的参考价值。

  这个问题来自例 船可以分步装载 每步装一个货箱 且需要考虑装载哪一个货箱 根据这种思想可利用如下贪婪准则 从剩下的货箱中 选择重量最小的货箱 这种选择次序可以保证所选的货箱总重量最小 从而可以装载更多的货箱 根据这种贪婪策略 首先选择最轻的货箱 然后选次轻的货箱 如此下去直到所有货箱均装上船或船上不能再容纳其他任何一个货箱

  例 假设n = [w w ]=[ ] c= 利用贪婪算法时 所考察货箱的顺序为 货箱 的总重量为 个单位且已被装载 剩下的装载能力为 个单位 小于剩下的任何一个货箱 在这种贪婪解决算法中得到[x x ] = [ ]且?xi =

  定理 利用贪婪算法能产生最佳装载

  证明可以采用如下方式来证明贪婪算法的最优性 令x = [x xn ]为用贪婪算法获得的解 令y =[ y yn ]为任意一个可行解 只需证明n ?i= xi ≥n ?i= yi 不失一般性 可以假设货箱都排好了序 即wi≤wi + ( ≤i≤n) 然后分几步将y 转化为x 转换过程中每一步都产生一个可行的新y 且n ?i = yi 大于等于未转化前的值 最后便可证明n ?i = xi ≥n ?j = yi

  根据贪婪算法的工作过程 可知在[ n] 的范围内有一个k 使得xi = i≤k且xi = i>k 寻找[ n]范围内最小的整数j 使得xj≠yj 若没有这样的j 存在 则n ?i= xi =n ?i = yi 如果有这样的j 存在 则j≤k 否则y 就不是一个可行解 因为xj≠yj xj = 且yj = 令yj = 若结果得到的y 不是可行解 则在[ j+ n]范围内必有一个l 使得yl = 令yl = 由于wj≤wl 则得到的y 是可行的 而且 得到的新y 至少与原来的y 具有相同数目的

  经过数次这种转化 可将y 转化为x 由于每次转化产生的新y 至少与前一个y 具有相同数目的 因此x 至少与初始的y 具有相同的数目 货箱装载算法的C + +代码实现见程序 由于贪婪算法按货箱重量递增的顺序装载 程序 首先利用间接寻址排序函数I n d i r e c t S o r t对货箱重量进行排序(见 节间接寻址的定义) 随后货箱便可按重量递增的顺序装载 由于间接寻址排序所需的时间为O (nl o gn)(也可利用 节的堆排序及第 章的归并排序) 算法其余部分所需时间为O (n) 因此程序 的总的复杂性为O (nl o gn)

  程序 货箱装船

  template

  void ContainerLoading(int x[] T w[] T c int n)

  // 货箱装船问题的贪婪算法

  // x[i] = 当且仅当货箱i被装载 <=i<=n

  // c是船的容量 w 是货箱的重量

  // 对重量按间接寻址方式排序

  // t 是间接寻址表

  int *t = new int [n+ ];

  I n d i r e c t S o r t ( w t n);

  // 此时 w[t[i]] <= w[t[i+ ]] <=i < p>

  // 初始化x

  for (int i = ; i <= n; i++)

  x[i] = ;

  // 按重量次序选择物品

  for (i = ; i <= n && w[t[i]] <= c; i++)

  x[t[i]] = ;

  c = w[t[i]]; // 剩余容量

  delete [] t;

cha138/Article/program/sjjg/201311/23597

相关参考

知识大全 贪婪算法之——拓扑排序

  一个复杂的工程通常可以分解成一组小任务的集合完成这些小任务意味着整个工程的完成例如汽车装配工程可分解为以下任务将底盘放上装配线装轴将座位装在底盘上上漆装刹车装门等等任务之间具有先后关系例如在装轴之

知识大全 贪婪算法之——背包问题

  在/背包问题中需对容量为c的背包进行装载从n个物品中选取装入背包的物品每件物品i的重量为wi价值为pi对于可行的背包装载背包中物品的总重量不能超过背包的容量最佳装载是指所装入的物品价值最高即n?i

知识大全 贪婪算法之——二分覆蓋

  二分图是一个无向图它的n个顶点可二分为集合A和集合B且同一集合中的任意两个顶点在图中无边相连(即任何一条边都是一个顶点在集合A中另一个在集合B中)当且仅当B中的每个顶点至少与A中一个顶点相连时A的

知识大全 贪婪算法之——单源最短路径

  在这个问题中给出有向图G它的每条边都有一个非负的长度(耗费)a[i][j]路径的长度即为此路径所经过的边的长度之和对于给定的源顶点s需找出从它到图中其他任意顶点(称为目的)的最短路径图a给出了一个

知识大全 贪婪算法思想

  在贪婪算法(greedymethod)中采用逐步构造最优解的方法在每个阶段都作出一个看上去最优的决策(在一定的标准下)决策一旦作出就不可再更改作出贪婪决策的依据称为贪婪准则(greedycrite

知识大全 第 1 章 贪婪算法

  虽然设计一个好的求解算法更像是一门艺术而不像是技术但仍然存在一些行之有效的能够用于解决许多问题的算法设计方法你可以使用这些方法来设计算法并观察这些算法是如何工作的一般情况下为了获得较好的性能必须对

知识大全 数据结构之算法和算法分析[1]

  算法与数据结构的关系紧密在算法设计时先要确定相应的数据结构而在讨论某一种数据结构时也必然会涉及相应的算法下面就从算法特性算法描述算法性能分析与度量等三个方面对算法进行介绍  算法特性  算法(Al

知识大全 数据结构之算法和算法分析[2]

  算法与数据结构是相辅相承的解决某一特定类型问题的算法可以选定不同的数据结构而且选择恰当与否直接影响算法的效率反之一种数据结构的优劣由各种算法的执行来体现  要设计一个好的算法通常要考虑以下的要求 

知识大全 数据结构之算法和算法分析[4]

  一个算法是由控制结构和原操作构成的其执行时间取决于两者的综合效果为了便于比较同一问题的不同的算法通常的做法是从算法中选取一种对于所研究的问题来说是基本运算的原操作以该原操作重复执行的次数作为算法的

知识大全 数据结构之算法和算法分析[5]

  ⒉空间复杂度  一个程序的空间复杂度(Spaceplexity)是指程序运行从开始到结束所需的存储量  程序的一次运行是针对所求解的问题的某一特定实例而言的例如求解排序问题的排序算法的每次执行是对