算法简介:贪婪算法----近似装箱问题

算法简介

算法简介

近似装箱问题

设给定N项物品,大小为s1,s2,…,sM,所有的大小都满足0<s1≤1.问题是要把这些物品装到最小数目的箱子中去,已知每个箱子的容量是1个单位.作为例子,下图所示为把大小为0.2,0.5,0.4,0.7,0.1,0.3,0.8的一列物品最优装箱的方法.
在这里插入图片描述

解决算法

  • 请注意:既然采用的是贪婪算法解决近似装箱问题,所得的接不一定是最优解,但是离最优解不太远

联机算法

1. 下项适合算法
  • 算法思路
    当处理任何一项物品时,我们检查看它是否还能装进刚刚装进物品的同一个箱子中去.如果能够装进去,那么就把它放入该箱中;否则,就开辟一个新的箱子将其放进去.
  • 算法特点
    令M是将一列物品Ⅰ装箱所需的最优装箱数,则下项适合算法所用箱子数绝不超过2M.存在一些顺序使得下项适合算法用箱2M-2个.
  • 算法图解
    在这里插入图片描述
    在这里插入图片描述
2. 首项适合算法
  • 算法思路
    算法的策略是依序扫描这些箱子,并把新的一项物品放入足能盛下它的第一个箱子中.因此,只有当前面那些放置物品的箱子都容不下当前物品的时候,我们才开辟一个新箱子.
  • 算法特点
  1. 令M是将一列物品Ⅰ装箱所需要的最优箱子数,则首次适合算法使用的箱子数绝不多于17/10M+7/10,存在使得首次适合算法使用17/10(M-1)个箱子的序列.
  2. 当首次适合算法对大量其大小均匀分布在0和1之间的物品进行运作时,经验结果指出,首次适合算法用到大约比最优装箱方法多2%的箱子.在许多情况下,这是完全可以接受的.
  • 时间复杂度
    O(NlogN)
  • 算法图解
    在这里插入图片描述
3. 最佳适合算法
  • 算法思路
    该算法不是把一项新物品放入所发现的第一个能够容纳它的箱子,而是放到所有箱子中能够容纳它的最满的箱子中.
  • 算法特点
    该算法绝不会超过最优算法的大约1.7倍
  • 时间复杂度
    O(NlogN)
  • 算法图解
    在这里插入图片描述

脱机算法

  • 所有联机算法的主要问题在于将大项物品装箱困难,特别是当它们在输入的后期出现时.围绕这个问题的自然方法是将各项物品排序,把最大的物品放在最先.此时可以应用首次适合算法或最佳适合算法,分别得到首次适合递减算法和最佳适合递减算法.
1. 首次适合递减算法
  • 算法思路
    将所有数据进行降序排序,然后采用首次适合算法
  • 算法特点
    如果一种最优装箱法使用M个箱子,那么首次适合递减算法使用的箱子数绝不超过(4M+1)/3个
  • 算法图解
    在这里插入图片描述
2. 最佳适合递减算法
  • 算法思路
    将所有数据进行降序排序,然后采用最佳适合算法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值