INF421 - Amphi 4
我们可以利用Induction和交换(减少逆序数)的思路来证明一个Greedy算法是正确的。
我们可以通过Lower Bound来启发得到算法。
1. Introduction to Greedy Algorithms and Scheduling
Def: Scheduling
- Planning Process Over Time
- 使用Unified Language.
第一个问题:Interval Scheduling
有一个n job的集合J,每一个job有一个start time s j s_j sj和一个end time t j t_j tj ∀ j ∈ J \forall j \in J ∀j∈J
Constraint:有一个机器,不能同时处理多个任务
目标函数:max number jobs scheduled
Greedy Algorithms
Builds up a solution iteratively, in each step taking the decision that at that moment looks best (without looking into the future).
Rq:
- 如果它们正确,则他们既简单又高效
- 可以用它作为启发式算法的开始。
利用Greedy Alg写Interval Scheduling问题的模版
Initialization: no interval in the solution, all interval available
Iteration:
- While there are intervals available
- choose the most interesting available interval (前面的例子中就是最短的那个)
- remove it from the set of available intervals (如果再放回去的话,就会不断地取放这个元素)
- if it does not overlap with the intervals in the solution,
- then add it to the solution
利用上面的模版给出问题的算法: Shortest-first
- Solution S = ϕ S = \phi S=ϕ
- for j ∈ J j\in J j∈J (J按照长度从小到大排序):
- 将 j j j踢出J
- if S ∩ j = ϕ S \cap {j} = \phi S∩j=ϕ,则将j加入S的集合
- return S S S
但是这个算法只能得到feasible的解,而不能得到optimal的解。
反例:
但最优解是5:
利用上面的模版给出问题的算法: Earliest-First
- Solution S = ϕ S = \phi S=ϕ
- for j ∈ J j\in J j∈J (J按照开始时间从小到大排序):
- 将 j j j踢出J
- if S ∩ j = ϕ S \cap {j} = \phi S∩j=ϕ,则将j加入S的集合
- return S S S
利用上面的模版给出问题的算法: Earliest-End
- Solution S = ϕ S = \phi S=ϕ
- for j ∈ J j\in J j∈J (J按照结束时间从小到大排序):
- 将 j j j踢出J
- if S ∩ j = ϕ S \cap {j} = \phi S∩j=ϕ,则将j加入S的集合
- return S S S
我们可以证明它确实是一个Optimal Solution.
证明 Earliest-End能给出原问题的Optimal Solution:
Lemma 1: (“can’t be wrong to start with the job that ends first”)
我们证明每一个Greedy Decision都不会错。
即: There is an optimal solution that contains the job with earliest end time.
Dem:
- 假设S是一个Optimal的解。
- 令j是S中结束最早的任务,设j开始时间为 s j s_j sj,结束时间为 e j e_j ej。则S中除了j之外的任务结束时间都比它迟,且因为算法,他们开始的时间 s j ′ s_j' sj′都比 e j e_j ej要大(因为他们和j没有交集)。
- 假设k是所有数据集中结束时间最早的任务,则 s k < e k < e j s_k<e_k<e_j sk<ek<ej,所以将j用k换掉得到的Solution S ′ S' S′也是原问题的一个最优解,因为两者拥有同样的元素。
Lemma 2: (Exchange Property)
设 j j j是一个Optimal Solution中的一个工作
设 J ′ J' J′所有不和 j j j冲突的任务的集合,设 S ′ ⊆ J ′ S' \subseteq J' S′⊆J′
则 S ′ S' S′是 J ′ J' J′中的Optimal Solution ⇔ \Leftrightarrow ⇔ { j } ∪ S ′ \{j\} \cup S' { j}∪S′是J中的Optimal Solution
Dem: 见Poly
Thm:
证明:Earliest-End是正确的算法
- 我们根据要安排的工作的集合长度 ∣ J ∣ |J| ∣J∣运用数学归纳法:
对于任意的 ∣ J ′ ∣ < ∣ J ∣ |J'|<|J| ∣J′∣<∣J∣我们都可以通过这个算法给出正确的解。 - 假设j是J中最早停止的工作。
- 记 J ′ J' J′为一个不和 j j j重叠的工作的集合,鉴于 ∣ J ′ ∣ < ∣ J ∣ |J'|<|J| ∣J′∣<∣J∣,根据归纳假设,我们可以得到一个 J ′ J' J′正确的解 S ′ S' S′
- 由Lemma 1, j j j包含在一个 J J J的Optimal的解集里面。
- 由Lemma 2,因为 S ′ S' S′是 J ′ J' J′上的最优解,所以 S = { j } ∪ S ′ S=\{j\} \cup S' S={ j}∪S′是一个解。
- 又因为S是我们算法给出的solution,所以我们的算法能给出原问题的Optimal的解。
怎么寻找Greedy Algorithm?
Each greedy decision must be so good that we do not regret it regardless what decisions come next !
A good greedy decision is so profitable that it does not matter what other options it destroys.
A good greedy decision interacts little with other options.
2. 第二个问题:Minimizing the maximum Lateness
Given:
- 一个n个jobs的集合 J J J和一个单任务处理的机器。
- 每一个工作包含
processing time
p j p_j pj和deadline
d j d_j dj。Wanted:
Schedule S S S,
C j C_j Cj:job j j j完成的时刻(completion time)
L j L_j Lj:job j j j的lateness。 L j : = m a x { 0 , C j − d j } L_j := max\{0,C_j-d_j\} Lj:=max{ 0,Cj−dj}
目的:
Minimize the maximum lateness L m a x : = m a x { L j ∣ j ∈ J } L_{max}:=max\{L_j | j \in J\} Lmax:=max{ Lj∣j∈J},即所有人的等待时间都小于 L m a x L_max Lmax。
EDF: Earliest Deadline First
Sort the jobs by increasing deadline and schedule them in this order (without leaving the machine idle). Θ \Theta Θ(nlogn)
可以证明: EDF computes a schedule with minimal max-lateness.
证明EDF能给出原问题的Optimal Solution:
红色的虚线是交换前(j=4排在k=3)其时的max lateness,换完之后的lateness是红色的实线。(黑色虚线代表每个任务的ddl)
因此,我们尝试证明
如果存在两个工作 j j j和 k k k,使得 d j > d k d_j>d_k dj>dk,但是 j j j却排在 k k k的前面,则交换j和k能改善max lateness
- Dem:
- 记每个工作开始时间为 s s s,结束时间为 e e e。
- 在交换之前, e j = t 1 e_j=t_1 ej=t1, e k = t 2 e_k=t_2 ek=t2, t 1 < t 2 t_1<t_2 t1<t2两者的lateness为 e j − d j e_j-d_j ej−dj和 e k − d k e_k-d_k ek−dk,由假设 e j < e k , d k < d j e_j<e_k,d_k<d_j ej<ek,dk<dj,因此 e j − d j < e k − d k e_j-d_j <e_k-d_k ej−dj<ek−dk。所以两者最大的lateness为 e k − d k = t 2 − d k e_k-d_k=t_2-d_k ek−dk=t2−dk。
- 交换完之后 t 1 < t 2 t_1<t_2 t1<t2, e k = t 1 < e j = t 2 , d k < d j e_k=t_1<e_j=t_2,d_k<d_j ek=t1<ej=t2,dk<dj。我们注意到
- lateness j : e j − d j < e j − d k = t 1 − d k < t 2 − d k e_j-d_j<e_j-d_k=t_1-d_k<t_2-d_k ej−dj<ej−dk=t1−dk<t2−dk
- lateness k: e k − d k < t 1 − d k < t 2 − d k e_k-d_k<t_1-d_k<t_2-d_k ek−dk<t1−dk<t2−dk。
- 因此交换完后两者最大的lateness肯定小于交换之前的lateness。
之后,我们只要证明每一个Schedule都可以通过这个交换的方式得到Optimal Solution。
这个是显然的,因为Optimal Solution下我们没有逆序数,而任何一个非Optimal的序列都可以通过交换得到最后的序列。
Main Proof Argument: Transforming Solutions
3. 第三个问题:Preemptive Makespan Minimization
- preemptive: 抢先的
类似于煎饼问题。
n n njobs
,每一个工作有一个processing time p j p_j pj
m m mparallel identical machines
Preemption (允许抢占):
- 每一个工作可以被拆分成两块到若干个机器上完成
- 但一个工作不可以同时由两个机器执行。
目的:
Minmakespan
C m a x : = m a x j C j C_{max}:=max_j C_j Cmax:=maxjCj取决于最后一个任务才完成的时刻。
例子:
2个Lower Bounds
Lemma 1:
The makespan is at least 1 m ∑ j ∈ J p j : = D 1 \frac{1}{m}\sum_{j\in J}p_j :=D_1 m1∑j∈Jpj:=D1
Dem: 反证
Lemma 2:
The makespan is at least m a x { p j ∣ j ∈ J } : = D 2 max\{p_j | j\in J\}:=D_2 max{
pj∣j∈J}:=D2
Dem:
因为我们即便可以把一个任务拆分开来,但是我们每一个时刻只能完成一部分这个任务(一个时间段只能对应一部分这个任务)。因此,最少需要这个任务的时长 p j p_j pj。
McNaughton’s wrap-around rule:
具体算法描述:
将所有的jobs排成一排,取 D = m a x D 1 , D 2 D=max{D_1,D_2} D=maxD1,D2,然后每D一截,就可以得到最后的时间。
- 由Lower Bound定义知道这个算法是Optimal的。
- 可行性:
- 由 m D > m D 1 mD>mD_1 mD>mD1,所以所有的任务能被安排在 m D mD mD的总时间里面。
- 由 m D > m D 2 mD>mD_2 mD>mD2,所以不会产生同时有多个机器处理一个任务的情况。
4. 第四个问题:Non-Preemptive Makespan Minimization
n n n
jobs
,每一个工作有一个processing time p j p_j pj
m m mparallel identical machines
不允许抢占:
目的:
Minmakespan
C m a x : = m a x j C j C_{max}:=max_j C_j Cmax:=maxjCj取决于最后一个任务才完成的时刻。
一些观察:
- 什么时候执行任务不再重要,而是在哪个机器上和另外哪些机器形成组合执行任务。(因为不可以抢占,所以交换顺序很方便)
- 这是一个NP-complete的问题
- 利用DP可以得到一个 O ( n m P m − 1 ) O(nmP^{m-1}) O(nmPm−1)的算法,KaTeX parse error: Undefined control sequence: \sun at position 3: P=\̲s̲u̲n̲_{j\in J}p_j
鉴于NP-complete问题不能用Polynomial Time解决,我们尝试使用另外一种解法:
Greedy Approximation Algorithm
如,每次把任务分给最先完成的机器。
Performance of List Scheduling
我们可以证明通过以上的算法得到的 C m a x S C_{max}^S CmaxS
The makespan C m a x S C_{max}^S CmaxS of any list scheduling solution S S S is at most twice the optimal makespan C m a x ∗ C_{max}^* Cmax∗: C m a x S ≤ C m a x ∗ C_{max}^S \leq C_{max}^* CmaxS≤Cmax∗.
Dem:
- 设 j j j是见证makespan的工作,在上图的例子中就是(7)。
- 则按照我们的算法,之所以会选择这个Machine安排工作,是因为它最先结束,记机器数量为 m m m
- j j j工作开始时刻 s j ≤ average load after j-1 jobs = 1 m ∑ k = 1 j − 1 p k ≤ D 1 s_j \leq \text{average load after j-1 jobs} = \frac{1}{m}\sum_{k=1}^{j-1}p_k \leq D_1 sj≤average load after j-1 jobs=m1∑k=1j−1pk≤D1。一种直观的想法是,因为这个Machine最先完成,所以其他机器的Schdule对于此机器而言都是突出来的,这样把它们突出来的部分减下来平均到 m m m个机器上,则一定比 s j s_j sj要大。小于等于 D 1 D_1 D1是因为 D 1 D_1 D1定义为j个工作在m个机器上的平均值。
- C m a x S = s j + p j ≤ D 1 + D 2 ≤ 2 C m a x ∗ C_{max}^S=s_j+p_j \leq D_1+D_2 \leq 2C_{max}^* CmaxS=sj+pj≤D1+D2≤2Cmax∗。因为 D 1 , D 2 D_1,D_2 D1,D2是这个问题的Lower Bound。
Def: rho-approximation algorithm
Let A be an algorithm for a minimization problem,
- A(I): 解法A在instance I上的质量
- OPT(I):I上最优解的质量
- 则A被称为 ρ \rho ρ-approximation algorithm如果对于任意instance I,我们有 A ( I ) O P T ( I ) ≤ ρ \frac{A(I)}{OPT(I)} \leq \rho OPT(I)A(I)≤ρ
Def: The approximation ratio of an algorithm
The approximation ratio of an algorithm A is the smallest ρ \rho ρ such that A is a ρ \rho ρ-approximation algorithm.
Appriximation Ratio of List Scheduling
The approximation ratio of list scheduling is 2.
我们采取构造+极限的方式给出证明
Dem:
考虑m台机器,m个长度为1的工作,m个长度为 1 m \frac{1}{m} m1的工作。
- 显然 O P T ( I ) = C m a x ∗ = 1 + 1 m OPT(I)=C_{max}^*=1+\frac{1}{m} OPT(I)=Cmax∗=1+m1,因为它取到了min。
- 如果任务的顺序是1,1,…, 1 m \frac{1}{m} m1,…, 1 m \frac{1}{m} m1,1,即最后一台机器只做 1 m \frac{1}{m} m1的工作。
此时 L S ( I ) = C m a x S = 2 LS(I)=C_{max}^S=2 LS(I)=CmaxS=2 - ρ ≥ L S ( I ) O P T ( I ) ≥ 2 1 + 1 m = 2 ( 1 − 1 m + 1 ) \rho \geq \frac{LS(I)}{OPT(I)} \geq \frac{2}{1+\frac{1}{m}} = 2(1-\frac{1}{m+1}) ρ≥OPT(I)LS(I)≥1+m12=2(1−m+11)对于任意m成立
当m趋向正无穷的时候为2。
5. 第五个问题:Better Non-Preemptive Makespan Minimization
由我们在上部分最后的观察可知,如果把最长的工作放在后面,则可能会导致makespan变长,因此我们要尽早schedule长的工作 -> List Scheduling With LTP Rule
List Scheduling With LTP Rule
LPT: Longest Processin time First
具体做法:
- Sort the jobs in order of decreasing process times.
- 用这个递减的顺序做List Scheduling.
Thm:
List Scheduling with LPT rule is a 4 3 \frac{4}{3} 34 approximation algorithm runs in O ( n l o g n ) O(nlogn) O(nlogn).
Dem:
- 设 S S S是LTP的Schedule, j j j是S中最后完成的工作(而非最后schedle的工作),则由LPT假设,所有工作的processing时间至少为 p j : = p m i n p_j:=p_{min} pj:=pmin。 s j s_j sj为第j个工作开始的时间
- Case 1: p j ≤ O P T ( I ) 3 p_j \leq \frac{OPT(I)}{3} pj≤3OPT(I)
- 类似前面的逻辑: C m a x S ≤ s j + p j ≤ D 1 + p j ≤ O P T ( I ) + O P T ( I ) 3 = 4 ∗ O P T ( I ) 3 C_{max}^S \leq s_j+p_j \leq D_1+p_j \leq OPT(I)+\frac{OPT(I)}{3}=\frac{4*OPT(I)}{3} CmaxS≤sj+pj≤D1+pj≤OPT(I)+3OPT(I)=34∗OPT(I)
- Case 1: p j > O P T ( I ) 3 p_j > \frac{OPT(I)}{3} pj>3OPT(I)
- 此时我们最佳的solution中的每个机器一定最多完成了2个工作, n ≤ 2 m n \leq 2m n≤2m,即有些机器可能只完成了一个工作。否则随便任意三个任务 ∑ p k ≥ 3 p j ≥ O P T ( I ) \sum p_k \geq 3p_j\geq OPT(I) ∑pk≥3pj≥OPT(I)和 O P T ( I ) OPT(I) OPT(I)的定义矛盾。
- 实际上在这种情况下,我们可以证明我们的解是Optimal的。
- 假设我们得到的解不是Optimal的,即存在 S ′ S' S′它是更优的解。此时 j j j的一定会在 [ 2 m + 2 − j , 2 m ] [2m+2-j,2m] [2m+2−j,2m]中寻找它的Partner p ∗ p* p∗,然而p*的partner x x x会被迫接受一个比 p 2 m + 1 − j p_{2m+1-j} p2m+1−j更大的元素 p y p_y py,即 p x ≥ p j p_x \geq p_j px≥pj和 p y ≥ p 2 m + 1 − j p_y \geq p_{2m+1-j} py≥p2m+1−j
- 所以 p x + p y ≥ p j + p 2 m + 1 − j p_x+p_y \geq p_j +p_{2m+1-j} px+py≥pj+p2m+1−j,换言之, S ′ S' S′的makespan比S还要长,所以矛盾。S是Solution Optimal。