Greedy的基本思路
用一个方法在每一个阶段找到最好的决策。在算法终止时,可以得到全局最优解。
问题
Interval Scheduling Problem:
- a set of request
- request corresponds to an interval of time with starting at and finishing at
基本定义
Compatible: No two of the requests overlap in time.
Optimal: Compatible sets of maximum size.
问题
局部最优选择方法:
- 选择最早结束的任务 。
- 删除所有与 时间重合的任务 (non-compatible request)。
- 从剩余的任务中选择结束时间最早的(如此往复,直到没有任务可以选择)。
算法伪代码
令
为既没有被 accept 也没有被 reject 的 requests 的集合。
令
为被 accept 的 requests 的集合。
- Initially let be the set of all requests, and let be empty
- While is not yet empty
- Choose a request that has the smallest finishing time
- Add request to A
- Delete all request from that are not compatible with request
- EndWhile
- Return the set
定理
证明思路:
令
为 optimal set of interval (最优解集)
令
令
WTS:
, 即
在前半部分
与
一样,但是后面
每一步更好
定理1: is a compatible set of request.
定理2: For all indices
, we have
.
证明:(归纳法)
has the minimum finishing time, 所以一定有
假设
因为
是 compatible set,
因此 request
和 request
的时间不重叠,即
Greedy Algorithm 选择
最小的 available interval 且
定理2表明了 Greedy Algorithm remains ahead of
定理3: The greedy algorithm returns an optimal set
.
证明:(反证法)
若
不是最优的,那么
, 即
.
由定理2,当
时,
。
在
结束之后才开始,因此
也是在
结束之后才开始的,即
但是我们假设贪婪算法在
之后就结束了,矛盾
Implementation
Run-time:
- sort the requests in order of finishing time and label them, i.e., when .
- Construct and array ( ).
- 选择 finishing time 最小的,然后按顺序查找一个 的 interval ,并选择它。如此往复。