趣味算法第二章-例题

14天阅读挑战赛

贪心算法-例题

一:最优装载问题

海盗们截获一艘装满各种各样古董的货船,每一件古董都价值连城,但一旦打碎就会失去其原有的价值。海盗船虽然足够大,但载重量是有限的。海盗船的重量为W,每件古董的重量为Wi,如何才能把尽可能多的古董装上海盗船呢?

(1)问题分析 

问题要求装载的古董尽可能多,在载重量有限的情况下,优先把重量最小的古董装进去,装的古董越多。可以采用重量最小者先装的贪心策略,从局部最优解达到全局最优,从而得到最优装载问题的最优解。

(2)算法设计

1.把n个古董的重量从小到大(非递减)排序

2.根据贪心策略选择装入的古董,直到不能继续装为止,此时达到最优。

(3)完美图解 

每个古董的重量如表2-1所示,海盗船的载重量W为30,在不打碎古董且不超出载重量的情况下,怎样才能装入最多的古董呢?

1.贪心策略是每次选择重量最小的古董装入海盗船,因此对表2-1按照古董重量进行非递减排序,排序结果如表2-2所示。

 2.按照贪心策略,每次选择重量最小的古董装入海盗船(tmp代表已装入的古董重量,ans代表已装入的古董数量)。

 (4)算法详解

(5)算法分析及优化拓展 

1. 算法复杂度分析

   (1)时间复杂度:用于排序古董重量的sort函数的平均时间复杂度为O(nlogn),贪心策略求解的时间复杂度为O(n),O(n)比O(nlogn)小,忽略小项,因此总的时间复杂度为O(nlogn)。

   (2)空间复杂度:辅助空间为tmp、ans等变量,它们都是常数阶的,因此空间复杂度为O(1)

2.优化拓展

 二:阿里巴巴与四十大盗——背包问题

 (1)问题分析

本题为可分割背包问题,可以尝试贪心策略。

1.每次选择价值最大的物品装入背包

2.每次选择重量最小的物品装入背包

3.每次选单位重量价值最大的物品装入背包

采用第三种贪心策略——每次从剩下的物品中选单位重量价值最大的物品。

(2)算法设计

 (3)完美图解

 1.贪心策略是每次选单位重量价值(价值/重量)大的物品,因此可以按单位重量价值对物品进行降序排序,排序后的物品清单如表2-4 所示。

 2.按照贪心策略,每次选择单位重量价值大的物品装入背包

 3.构造最优解

 (4)算法详解

 (5)算法分析及优化拓展

1 . 算法复杂度分析

    (1)时间复杂度:时间主要耗费在对物品按单位重量价值进行排序上,一般采用快速排序法,时间复杂度为O(nlogn)

    (2)算法优化拓展

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

月亮被咬碎成星星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值