当前位置: 代码迷 >> 综合 >> Greedy Algorithm - Interval Scheduling
  详细解决方案

Greedy Algorithm - Interval Scheduling

热度:31   发布时间:2024-01-31 11:33:07.0

Greedy的基本思路

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

问题

Interval Scheduling Problem:

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

基本定义

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

问题

局部最优选择方法:

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

算法伪代码

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

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

定理

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

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

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

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

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

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

Implementation

Run-time: O ( n log ? n ) O(n \log n)

  1. sort the requests in order of finishing time and label them, i.e., f ( i ) < f ( j ) f(i)<f(j) when i < j i<j . O ( n log ? n ) \quad \quad \quad O(n \log n)
  2. Construct and array S [ 1... n ] S[1... n] ( S [ i ] = s ( i ) S[i]=s(i) ). O ( n ) \quad \quad \quad O(n)
  3. 选择 finishing time 最小的,然后按顺序查找一个 s ( j ) f ( 1 ) s(j) \geq f(1) 的 interval ,并选择它。如此往复。 O ( n ) \quad \quad \quad O(n)
  相关解决方案