算法导论贪心算法—排队等待问题单位时间的调度问题0-1背包贪心近似多机调度问题

Posted 之墨_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法导论贪心算法—排队等待问题单位时间的调度问题0-1背包贪心近似多机调度问题相关的知识,希望对你有一定的参考价值。

算法导论【贪心算法】—排队等待问题、单位时间的调度问题、多机调度问题

排队等待问题

在一个超市,有 N 个人排队到一个柜台付款,已知每个人需要处理的时间为Ti(0<i≤N),请你找一种排列次序,使每个人排队的时间总和最小。

  • 本题的贪心算法为:N 个数据从小到大排序,就是这 N 个人的最佳排序方案。

  • 每次选择一个处理时间最小的人排队,选择后只剩一个子问题:为剩余的人找一个排队次序,使每个人排队时间总和最小,此问题存在一个最优解,即贪心选择是安全的。假设有最优解序列 S 1 , S 2 , S 3 … . , S n S1,S2,S3….,Sn S1,S2,S3.,Sn,如果 S 1 S1 S1 不是最小的 T m i n Tmin Tmin,不妨设 S k = T m i n Sk=Tmin Sk=Tmin,将 S 1 S1 S1 S k Sk Sk 对调。显然对 S k Sk Sk 之后的人没影响,对 S k Sk Sk 之前的人等待时间都减少了 ( S 1 − S k ) > 0 (S1-Sk)>0 (S1Sk)>0。从而新的序列比原最优解序列好,矛盾!故贪心选择可以得到最优解。

单位时间的调度问题

现有一个机器要处理 n n n项任务,每项任务都可以在一个单位时间内完成。每项任务有截止时间 ( d 1 , d 2 , , … , d n ) (d1, d2,,…, dn) (d1,d2,,,dn)和超过截止时间内未完成的惩罚因子 ( w 1 , w 2 , , … , w n ) (w1, w2,,…, wn) (w1,w2,,,wn),求所有任务排列中最小的惩罚因子和。例如若有 3 3 3项任务,其截止时间为 ( 2 , 2 , 2 ) (2,2,2) (2,2,2),惩罚因子为 ( 6 , 7 , 8 ) (6,7,8) (6,7,8)。排列 123 , 132 , 213 , 231 , 312 , 321 123,132,213,231,312,321 123,132,213,231,312,321的惩罚因子和为分别是 8 , 7 , 8 , 6 , 7 , 6 8,7,8,6,7,6 8,7,8,6,7,6。则6是所有任务排列中惩罚因子最小和为 6 6 6

  • 贪心解法:先将任务按照惩罚大小降序排列,每个任务都在最接近 d d l ddl ddl的时间完成,优先完成惩罚较大的任务,再对后面的任务 x x x找它的 x . d d l x.ddl x.ddl时间内是否有空闲时间可以完成这个任务,如果找不到说明这个任务无法完成,就把这个任务的惩罚 x . p x.p x.p加入 a n s ans ans,最后遍历完所有任务的 a n s ans ans就是答案。
  • 每次完成惩罚较大的任务,只剩一个子问题:如何选择后续任务的完成次序使总惩罚最小,此问题总存在一个最优解,故贪心选择是安全的。假设不在最接近截止时间的时间处优先完成惩罚较大的任务,而是先完成其他任务,则当完成其他任务后,这个惩罚较大的任务显然无法完成,则此时受到的惩罚必然大于等于原解法,即此最优解不会超过原最优解,故贪心选择可以得到一个最优解。

0-1背包贪心近似

给定一组n个物品,每个物品的利润为 p i pi pi,大小为 s i si si,一个背包的大小为 B ( B > s i ) B(B>si) BB>si。解:受约束 ∑ i ∈ S s i ≤ B ∑_i∈S si≤B iSsiB的项 S ⊆ [ n ] S⊆[n] S[n]的子集。要令所选子集的总利润最大, ∑ i ∈ S p i ∑_i∈S pi iSpi

  • 贪心解法:按照 P i S i \\cfracPiSi SiPi的非递增顺序对项目进行排序。贪婪地按上述顺序挑选物品,直到碰到一个物品ai,它的大小太大了背包无法放下,此时判断一下{a1,a2,…,ai−1}的总利润和ai的利润谁更大,选择其中较大的。
  • 贪心近似算法解决背包问题是2−近似的,即结果可能是最优解的1/2

多机调度问题

设有n个独立的作业1, 2, …, n,由m台相同的机器M1, M2, …, Mm进行加工处理,作业i所需的处理时间为ti(1≤i≤n),每个作业均可在任何一台机器上加工处理,但不可间断、拆分。多机调度问题要求给出一种作业调度方案,使所给的n个作业在尽可能短的时间内由m台机器加工处理完成。

  • 当 n <= m 时,只要将机器Mi 分配给作业 i 即可
  • 当 n > m 时,一种比较好的贪心策略是:将作业从大到小排序,按此顺序将作业分配给空闲机器
  • 如果不优先执行较长的作业,那么可能出现短作业都执行完,只剩长作业在某台机器上运行,此时的机器利用率也较低,即这种解法不会超过贪心选择的解法,即贪心选择可以得到最优解

以上是关于算法导论贪心算法—排队等待问题单位时间的调度问题0-1背包贪心近似多机调度问题的主要内容,如果未能解决你的问题,请参考以下文章

李小平委员等||混合等待流水车间调度问题的迭代贪心算法

贪心算法训练——智力大冲浪(带期限和罚款的单位时间调度问题)

算法导论习题—摊还时间代价分析栈实现队列贪心算法近似比集合覆盖问题

算法导论笔记——第十六章 贪心算法

贪心算法算法导论 找零问题

算法导论——贪心算法