Greedy Algorithm - Interval Scheduling

Greedy的基本思路

用一个方法在每一个阶段找到最好的决策。在算法终止时,可以得到全局最优解。

问题

Interval Scheduling Problem:

  1. a set of request { 1 , 2 , . . . , n } \{1, 2, ..., n\} {1,2,...,n}
  2. i t h i^{th} ith request corresponds to an interval of time with starting at s i s_i si and finishing at f i f_i fi

基本定义

Compatible: No two of the requests overlap in time.
Optimal: Compatible sets of maximum size.

问题

局部最优选择方法:

  1. 选择最早结束的任务 i i i
  2. 删除所有与 i i i 时间重合的任务 (non-compatible request)。
  3. 从剩余的任务中选择结束时间最早的(如此往复,直到没有任务可以选择)。

算法伪代码

R R R 为既没有被 accept 也没有被 reject 的 requests 的集合。
A A A 为被 accept 的 requests 的集合。

  1. Initially let R R R be the set of all requests, and let A A A be empty
  2. While R R R is not yet empty
  3. \quad\quad Choose a request i ∈ R i \in R iR that has the smallest finishing time
  4. \quad\quad Add request i i i to A
  5. \quad\quad Delete all request from R R R that are not compatible with request i i i
  6. EndWhile
  7. Return the set A A A

定理

证明思路:
O \mathcal{O} O 为 optimal set of interval (最优解集)
A = { i 1 , i 2 , . . . , i k } A=\{ i_1, i_2, ..., i_k\} A={i1,i2,...,ik}
O = { j 1 , j 2 , . . . , j m } \mathcal{O}=\{ j_1, j_2, ..., j_m\} O={j1,j2,...,jm}

WTS: ∣ A ∣ = ∣ O ∣ |A|=|\mathcal{O}| A=O, 即 k = m k=m k=m
在前半部分 A A A O \mathcal{O} O 一样,但是后面 A A A 每一步更好

定理1: A A A is a compatible set of request.

定理2: For all indices r ≤ k r\leq k rk, we have f ( i r ) ≤ f ( j r ) f(i_r)\leq f(j_r) f(ir)f(jr).
证明:(归纳法)
r = 1 : i 1 r=1 : i_1 r=1:i1 has the minimum finishing time, 所以一定有 f ( i 1 ) ≤ f ( j 1 ) f(i_1)\leq f(j_1) f(i1)f(j1)
假设 f ( i r − 1 ) ≤ f ( j r − 1 ) f(i_{r-1})\leq f(j_{r-1}) f(ir1)f(jr1)
因为 O \mathcal{O} O 是 compatible set, f ( j r − 1 ) < s ( j r ) f(j_{r-1})<s(j_{r}) f(jr1)<s(jr)
∴ \therefore f ( i r − 1 ) < s ( j r ) f(i_{r-1})<s(j_r) f(ir1)<s(jr)
因此 request i r − 1 i_{r-1} ir1 和 request j r j_r jr 的时间不重叠,即 j r ∈ R j_r \in R jrR
∵ \because Greedy Algorithm 选择 f f f 最小的 available interval 且 j r ∈ R j_r \in R jrR
∴ \therefore f ( i r ) ≤ f ( j r ) f(i_r)\leq f(j_r) f(ir)f(jr)

定理2表明了 Greedy Algorithm remains ahead of O \mathcal{O} O

定理3: The greedy algorithm returns an optimal set A A A.
证明:(反证法)
A A A 不是最优的,那么 ∣ O ∣ > ∣ A ∣ |\mathcal{O}|>|A| O>A, 即 m > k m>k m>k.
定理2,当 r = k r=k r=k时, f ( i k ) ≤ f ( j k ) f(i_k)\leq f(j_k) f(ik)f(jk)
∵ m > k \because m>k m>k
∴ \therefore j k + 1 ∈ O j_{k+1} \in \mathcal{O} jk+1O
j k + 1 j_{k+1} jk+1 j k j_k jk 结束之后才开始,因此 j k + 1 j_{k+1} jk+1 也是在 i k i_k ik 结束之后才开始的,即 j k + 1 ∈ R j_{k+1} \in R jk+1R
但是我们假设贪婪算法在 i k i_k ik 之后就结束了,矛盾

Implementation

Run-time: O ( n log ⁡ n ) O(n \log n) O(nlogn)

  1. sort the requests in order of finishing time and label them, i.e., f ( i ) < f ( j ) f(i)<f(j) f(i)<f(j) when i < j i<j i<j. O ( n log ⁡ n ) \quad \quad \quad O(n \log n) O(nlogn)
  2. Construct and array S [ 1... n ] S[1... n] S[1...n] ( S [ i ] = s ( i ) S[i]=s(i) S[i]=s(i)). O ( n ) \quad \quad \quad O(n) O(n)
  3. 选择 finishing time 最小的,然后按顺序查找一个 s ( j ) ≥ f ( 1 ) s(j) \geq f(1) s(j)f(1) 的 interval ,并选择它。如此往复。 O ( n ) \quad \quad \quad O(n) O(n)
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值