贪心算法总结 Greedy Algorithms

2021-03-03  本文已影响0人  葵sunshine

1. Interval scheduling

1.1 问题描述

Interval scheduling 问题描述

1.2 问题分析

  1. 起始时间增序


    Counterexample for earliest start time

    有如上反例,若按start time,最多工作数为1,但实际情况为4,故不可行;

  2. 结束时间增序;
  3. interval length工作时长 f_j - s_j增序;
    Counterexample for shortest interval
    有如上反例,最多工作数为1,但实际为2,故不可行;
  4. 最少冲突工作数增序
    Counterexample for fewest conflicts
    有如上反例,深灰色工作冲突数为2,第一排浅灰色冲突数为3,最多工作数为3,但实际为4,故不可行。
    \therefore将工作按结束时间排序,依次选取与前面不冲突的工作。
    Interval scheduling pseudocode
    时间复杂度:排序是O(logn),for循环O(n), \therefore O(nlogn)

1.3 证明最优

Proof of optimality

反证法:
假设贪心不是最优解:

2. Scheduling to Minimize Lateness

2.1 问题描述

Scheduling to Minimize Lateness 问题描述

2.2 问题分析

先考虑如何排序

  1. 所需时间t_j增序
    counterexample for short processing time first
    有如上反例,job1无迟交,job2迟交1,\thereforereturn 1;实际上若交换两个工作位置,return 0;
  2. ddl时间d_j增序
  3. 最迟开始时间d_j-t_j增序
    counterexample for smallest slack
    \therefore将工作按ddl时间增序
    Sort jobs by deadline

2.3 证明最优

Exchange argument:通过交换元素将最优解转换为贪心解,但还保持最优性


Minimizing Lateness: Inversions

3. Optimal Caching

3.1 问题描述

Optimal Caching 问题描述

当cache中不存在所需元素时,需要访问cache交换元素。
目标:cache misses的次数最少

3.2 问题分析

Optimal Offine Caching: Farthest-In-Future

最优算法:cache miss时替换当前future queries中最远访问的元素。
e.g. future queries中第一个元素g出现cache miss, 需要exchange,判断current cache中需要替换哪个元素。
在future queries中

3.3 证明最优

思路:构造最优规划S,它有最小的cache misses次数;Farthest-In-Future规划S_{FF},两者在前j个请求的序列是相同的,如果能证明在第j+1步时,S可以转化为S_{FF}并且没有增加cache misses的次数,则可以说明S_{FF}是最优解。
最开始,假设SS_{FF}中元素如下:

S abcd
S_{FF} abcd

Case 1: 元素已经在Cache中
假设下一个请求的元素是d显然两者都不会发生cache miss,故两者总的cache misses次数还是相同;

S abcd
S_{FF} abcd

Case 2: 元素不在Cache中,SS_{FF}与外界交换相同的元素
假设下一个请求的元素是e,两者都用a与其交换,有

S ebcd
S_{FF} ebcd

SS_{FF}都增加了一次cache misses,故总cache misses次数还是相同;
Case 3: 元素不在Cache中,SS_{FF}与外界交换不同的元素
假设下一个请求的元素是e,S_{FF}交换a,S交换b,有

S aecd
S_{FF} ebcd

之后,下一个请求的元素有四种情况:
Case 3a: 元素在S_{FF}中, 不在S中; S交换a
也就是请求b,这时S用a交换b,有

S ebcd
S_{FF} ebcd

S有两次cache misses,而S_{FF}只有一次,之后SS_{FF}序列又保持一致;
Case 3b: 元素在S_{FF}中, 不在S中; S不交换a
也就是请求b,S用c交换b,有

S abde
S_{FF} ebcd

S_{FF}用a交换c,有

S abde
S_{FF} abde

两者cache misses次数相同,之后SS_{FF}序列又保持一致
Case 3c: 元素在S中, 不在S_{FF}
即请求a,这种情况不可能发生,因为S_{FF}移出的是最远需要的元素,即request中a会排在b之后;
Case 3d: 元素不在SS_{FF}
假设请求f,S用a交换f, S_{FF}用b交换f,有

S cdef
S_{FF} cdef

两者cache misses次数相同,之后SS_{FF}序列又保持一致
\therefore S_{FF}的cache misses次数不会多于最优解S, 即S_{FF}是最优解。

4. Clustering of Maximum Spacing

4.1 问题描述

Clustering of Maximum Spacing 问题描述
Cluster间的距离(Spacing):两个clsuter中距离最近的两个点之间的距离;
目标:给定cluster数量k,找到有最大spacing的k个聚类。

4.2 问题分析

Clustering of Maximum Spacing 问题分析

Single-link k-clustering 算法:

4.3 证明最优

上一篇 下一篇

猜你喜欢

热点阅读