๐ง Interval Scheduling
n๊ฐ์ ์์ ์ด ์กด์ฌํ๊ณ , ํด๋น ์์ ๋ค์ ์ํํ๋ ์๊ฐ์ด ๊ฐ๊ฐ [์์ ์๊ฐ, ์๋ฃ ์๊ฐ] ์ผ๋ก ์ฃผ์ด์ ธ ์๋ค๊ณ ํ๊ฒ ์ต๋๋ค.
๊ฐ์ ์๊ฐ์๋ ํ๋์ ์์ ๋ง์ด ๊ฐ๋ฅํ ๊ฒฝ์ฐ, ์ฃผ์ด์ง ์๊ฐ ๋ด์ ์ต๋ํ ๋ง์ ์์ ๋ค์ ์ํํ ์ ์๋๋ก scheduling ํ๋ ๊ฒ์ Interval Scheduling ์ด๋ผ๊ณ ํฉ๋๋ค.
์ด๋ ์์ $i, j$ ๋ฅผ ๋์์ ํ์ง ๋ชปํ ๊ฒฝ์ฐ, $i$ ์ $j$ ๋ overlap ๋์ด ์๋ค๊ณ ํฉ๋๋ค.
โญ๏ธ Psudocode
Initially R is the set of all jobs
A is empty // A will store all the jobs that will be scheduled
while R is not empty
choose job $i \in R$
add $i$ to $A$
remove from $R$ all jobs that overlap with $i$
์ ํฌ๋ ์ Psudocode์์ job i๋ฅผ greedy ํ๊ฒ ๊ณจ๋ผ ์ต์ ํด๋ฅผ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ ์์๋ด์ผ ํฉ๋๋ค.
์ด 4๊ฐ์ง์ ๋ฐฉ๋ฒ์ ์ดํด๋ณผ ๊ฒ์ด๋ฉฐ, ๊ฐ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ์ ๋ํ์ฌ ์๊ณ ๋ฆฌ์ฆ์ด ๊ณ ๋ฅด๋ ์์ ๊ณผ ์ต์ ํด๋ฅผ ๋ค์๊ณผ ๊ฐ์ ์์ผ๋ก ๋ํ๋ด๋๋ก ํ๊ฒ ์ต๋๋ค.
Algorithm์ด ๊ณ ๋ฅด๋ ์์ : ํ์
์ต์ ํด : ์ฃผํฉ์
โญ๏ธ Algorithm 1 - ์์ ์๊ฐ์ด ์ ์ผ ๋น ๋ฅธ ์์ ์ ํ
์์ ๊ฐ์ด ์์ ์๊ฐ์ ๋น ๋ฅด์ง๋ง ์งํ ์๊ฐ์ด ๋งค์ฐ ๊ธด ๊ฒฝ์ฐ ์ต์ ํด๋ฅผ ๊ตฌํ์ง ๋ชปํฉ๋๋ค.
โญ๏ธ Algorithm 2 - ์๋ชจ ์๊ฐ์ด ์ ์ผ ์ ์ ์์ ์ ํ
์์ ๊ฐ์ด ์๋ชจ ์๊ฐ์ด ์งง๋ค๊ณ ํ๋๋ผ๋ overlap ๋๋ ์์ ์ด ๋ง๋ค๋ฉด ์ต์ ํด๋ฅผ ๊ตฌํ์ง ๋ชปํฉ๋๋ค.
โญ๏ธ Algorithm 3 - ํด๋น ์์ ๊ณผ overlap ๋๋ ์์ ์ ๊ฐ์๊ฐ ์ ์ผ ์ ์ ์์ ์ ํ
overap ๋๋ ๊ฒ์ด ๊ฐ์ฅ ์ ๋ค๊ณ ํ๋๋ผ๋ ์ต์ ํด๋ฅผ ๊ตฌํ์ง ๋ชปํ ์ ์์ต๋๋ค.
์ง๊ธ๊น์ง ์ดํด๋ณธ ์๊ณ ๋ฆฌ์ฆ๋ค์ ๋ชจ๋ ์ต์ ํด๋ฅผ ๊ตฌํ์ง ๋ชปํ์์ต๋๋ค.
๋ค์์ ๋์ค๋ ์๊ณ ๋ฆฌ์ฆ์ ํตํด ์ต์ ํด๋ฅผ ๊ตฌํ ์ ์์ต๋๋ค.
โญ๏ธ Algorithm 4 - ๋๋๋ ์๊ฐ์ด ์ ์ผ ๋น ๋ฅธ ์์ ๋ถํฐ ๊ณ ๋ฅด๊ธฐ
ํด๋น ์๊ณ ๋ฆฌ์ฆ์ด ์ต์ ํด๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋ํ ์ฆ๋ช ์ ๋ค์๊ณผ ๊ฐ์ด ์ด๋ฃจ์ด์ง๋๋ค.
์์ ์๊ณ ๋ฆฌ์ฆ์ด ์์ ์ ์ ํํ ๋๋ง๋ค ํด๋น ์์ ๊ณผ overlapํ job๋ค์ R ์์ ๋ชจ๋ ์ ๊ฑฐํ๋ฏ๋ก, ๋น์ฐํ algorithm4 ์์ ๊ณ ๋ฅธ job๋ค์ ์๋ก overalpํ์ง ์์ต๋๋ค.
์ด์ ๋ ์งํฉ A์ O๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ ์ํ๊ฒ ์ต๋๋ค.
A: Algorithm 4๊ฐ ๊ณ ๋ฅธ ์์ ๋ค์ ์งํฉ.
O : ์ต์ ํด๋ฅผ ์ด๋ฃจ๋ ์์ ๋ค์ ์งํฉ.
๋ ์๊ณ ๋ฆฌ์ฆ์ ๊ฒฐ๊ณผ๋ก ์ํ๋๋ ์์ ์ ๊ฐ์๊ฐ ๊ฐ์์ ์ฆ๋ช ํ์ฌ์ผ ์ต์ ํด๋ฅผ ๋ฐํํจ์ด ์ฆ๋ช ๋ฉ๋๋ค.
$|A| = |O|$
claim ์ฆ๋ช ์ ์ theorem์ด ๋ฐ๋ก ์ฆ๋ช ๋ฉ๋๋ค.
$A = \left\{i_1, i_2, ..., i_k\right\}$ , $O = \left\{j_1, j_2, ..., j_m\right\}$ ์ด๋ผ ๋๊ณ ,
$s(i)$ ์ $f(i)$ ๋ฅผ ๊ฐ๊ฐ job $i$ ์ ์์ ์๊ฐ๊ณผ ์๋ฃ ์๊ฐ์ด๋ผ๊ณ ํ๊ฒ ์ต๋๋ค.
๊ทธ๋ผ k = m ์ ์ฆ๋ช ํ๋ฉด ์ claim์ ์ฆ๋ช ํ ์ ์์ต๋๋ค.
์ฐ์ ๊ท๋ฉ๋ฒ์ ์ด์ฉํ์ฌ ๋ชจ๋ $1 \leq r \leq k $ ์ ๋ํ์ฌ, $f($ $i_r$ $)$ $\leq$ $f($ $j_r$ $)$ ์ด๋ผ๋ ๊ฒ์ ์ฆ๋ช ํด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
r = 1 ์ธ ๊ฒฝ์ฐ, Algorithm์ ๊ฐ์ฅ ๋นจ๋ฆฌ ๋๋๋ ์์ ์ ์ ํํ๊ธฐ ๋๋ฌธ์ $f($ $i_1$ $)$ $\leq$ $f($ $j_1$ $)$ ์ ๋๋ค.
r = k ์ผ ๋ ์ฑ๋ฆฝํ๋ค๋๊ณ ๊ฐ์ ํ๋๋ก ํ๊ฒ ์ต๋๋ค.
์ด๋ $f($ $j_k$ $)$ ๋ณด๋ค ์์ ์๊ฐ์ด ๊ฐ๊ฑฐ๋ ๋ฆ์ ์๋ก์ด ์์ ์ด ์ถ๊ฐ๋์์ ๋, ์ต์ ํด๋ ํด๋น ์์ ์ ํฌํจํ ๊ฒ์ ๋๋ค.
์ด๋ ๊ฐ์ ์ ์ํ์ฌ $f($ $i_r$ $)$ $\leq$ $f($ $j_r$ $)$ ์ด๋ฏ๋ก, Algorithm ์ญ์ ํด๋น ์์ ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ $f($ $i_{k + 1}$ $)$ $=$ $f($ $j_{k+1}$ $)$ ์ด๋ฏ๋ก ๋ชจ๋ ๊ฒฝ์ฐ์ ๋ํ์ฌ $f($ $i_r$ $)$ $\leq$ $f($ $j_r$ $)$ ์ ๋๋ค.
A์ ๊ฐ์ k๊ณผ O์ ๊ฐ์ m์ ๋ํ์ฌ,
m > k ์ธ ๊ฒฝ์ฐ, ๋ฐ๋ก ์์์ ์ฆ๋ช ํ ์ฑ์ง์ ์ํ์ฌ $f($ $i_k$ $)$ $\leq$ $f($ $j_k$ $)$ ๊ฐ ๋ฉ๋๋ค.
๋ฐ๋ผ์ $f($ $i_k$ $)$ < $s($ $j_{k+1}$ $)$ ์ด ๋๋ฏ๋ก,
algorithm์ $j_{k+1}$ ์ ์ถ๊ฐ๋ก ์ ํํ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ m > k ์ธ ๊ฒฝ์ฐ algorithm์ ๋ชจ์์ด ๋๋ฏ๋ก $m = k$ ์ ๋๋ค.
ํด๋น ์๊ณ ๋ฆฌ์ฆ์ ๋ํ Psudocode๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
โญ๏ธ Psudocode
Initially R is the set of all jobs
A is empty // A will store all the jobs that will be scheduled
while R is not empty
choose $i \in R$ such that finishing time of $i$ is least
if $i$ does not overlap with requests in A
add $i$ to $A$
remove from $R$ all jobs that overlap with $i$
return the set $A$
ํด๋น ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐ ๋ณต์ก๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋ชจ๋ ์์ ๋ค์ ์๋ฃ ์๊ฐ ์์๋๋ก ์ ๋ ฌ : $O(n log n)$
- ํ์ฌ R ์์ ๋๋๋ ์๊ฐ์ด ์ ์ผ ์ด๋ฅธ ์์ ๊ณ ๋ฅด๊ธฐ : $O(1)$
- Overlap ๊ฒ์ฌ (์์ ํ๋๋น): ๋ง์ง๋ง์ผ๋ก ๊ณ ๋ฅธ job์ด ๋๋๋ ์๊ฐ์ ์ ์งํ์ฌ ํ์ฌ ๊ณ ๋ ค์ค์ธ job์ ์์ ์๊ฐ๊ณผ ๋น๊ตํด์ ํ๋ณ ๊ฐ๋ฅํฉ๋๋ค. $O(1)$
ํ๋ฒ ๊ฒ์ฌํ ์์ ์ ๋ค์ ๊ฒ์ฌํ์ง ์์ผ๋ฏ๋ก ์ด ์ํ ์๊ฐ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$$O(n \; log \;n + n) = O(n\;log\;n)$$
๐ง ๋ชจ๋ ๊ฐ์์ ๋ํ ๊ฐ์์ค ๋ฐฐ์
n๊ฐ์ ๊ฐ์์ ๋ํ์ฌ, ๊ฐ๊ฐ์ ๊ฐ์๋ ์์ ์๊ฐ๊ณผ ์ข ๋ฃ ์๊ฐ์ด ์ฃผ์ด์ง๋ค๊ณ ํ๊ฒ ์ต๋๋ค.
๊ฐ์ ์๊ฐ์ ๊ฐ์ ๊ฐ์์ค์์ ์ต๋ ํ๋์ ๊ฐ์๋ง ์งํํ ์ ์๋ค๊ณ ํ ๋, n ๊ฐ์ ๊ฐ์๋ฅผ ํ๊ธฐ ์ํด ์ต์๋ก ํ์ํ ๊ต์ค ๊ฐ์๋ฅผ ๊ตฌํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
โญ๏ธ Algorithm
ํ์ฌ ๊ต์ค ๋ฐฐ์ ์ด ์๋ ์์ ๋ค ์ค์์ ์์ ์๊ฐ์ด ์ ์ผ ๋น ๋ฅธ ์์ ์ ๊ณ ๋ฅธ ๋ค, ํด๋น ์์ ์ ๊ฐ๋ฅํ ๊ต์ค์ ๋ฐฐ์นํฉ๋๋ค.
์ด๋ ๊ฐ๋ฅํ ๊ต์ค์ด ์๋ ๊ฒฝ์ฐ ์๋ก์ด ๊ต์ค์ ๋ฐฐ์นํฉ๋๋ค.
๊ฐ์๋ค์ ์งํฉ R์ ๋ํ์ฌ, $R$ ์ depth๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ ์ํ๋๋ก ํ๊ฒ ์ต๋๋ค.
R์ ์ํ ๊ฐ์๋ค ์ค ์ด๋ ๋์ผํ ์์ ์์ ์ํ๋๋ ๊ฐ์๋ค์ ์ต๋ ๊ฐ์
์ด๋ ๊ฐ์๋ค์ ์งํฉ R์ ์๋ ๊ฐ์๋ฅผ ํ๊ธฐ ์ํด์๋ ์ ์ด๋ R์ depth ๋งํผ์ ๊ต์ค์ด ํ์ํฉ๋๋ค.
์ด๋ฅผ ํตํด ๋ฐฐ์ ํด์ผ ํ ๊ฐ์์ค์ ์ต์ ์๋ฅผ ๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
โญ๏ธ Psedocode
Initially R is the set of all requests
d = 0 // number of classrooms
Sort all the lectures in R based on their starting time
while R is not empty
choose $i \in R$ such that start time of $i$ is earliest
if $i$ can be scheduled in some classroom $k \leq d$
scheedule lecture i in classroom k
else
allocate a new classroom $d + 1$ and schedule lecture $i$ in $d + 1$
d =d + 1
ํด๋น ์๊ณ ๋ฆฌ์ฆ์ด ์ต์ ํด๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋ํ ์ฆ๋ช ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์์ greedy algorithm์ด depth ๊ฐ๋ณด๋ค ๊ต์ค์ ๋ ๋ง์ด ์๊ตฌํ๋ค๊ณ ๊ฐ์ ํ๋๋ก ํ๊ฒ ์ต๋๋ค.
depth์ ๊ฐ์ d๋ผ๊ณ ์นญํ๋๋ก ํ๊ฒ ์ต๋๋ค.
$j$ ๊ฐ $d + 1$ ๋ฒ์งธ์ ๊ต์ค์ ์๊ตฌํ๋ ๊ฐ์๋ค ์ค ์๊ณ ๋ฆฌ์ฆ์ด ์ฒ์์ผ๋ก ์ ํํ ๊ฐ์๋ผ ํ๊ฒ ์ต๋๋ค.
ํด๋น ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์๋ฅผ ์๊ฐ ์์๋๋ก ์ ํํ๋ฏ๋ก, j์ ๊ฒน์น๋ฉด์ ์์ ์๊ฐ์ด j ๋ณด๋ค ์ด๋ฅธ ๊ฐ์๊ฐ ์ ์ด๋ d๊ฐ ์์ต๋๋ค.
๋ฐ๋ผ์ j๊ฐ ์์ํ ์์ ์์ R์ depth๋ ์ ์ด๋ d + 1์ด ๋๊ณ , ์ด๋ R์ depth๊ฐ d๋ผ๋ ๊ฐ์ ์ ๋ชจ์์ด ๋ฉ๋๋ค.
์ด์ ํด๋น ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๋ถ์ํด ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋ชจ๋ ๊ฐ์๋ค์ ์์ ์๊ฐ ์์๋๋ก ์ ๋ ฌ : $O(n \; log \;n)$
- ํ์ฌ R์์ ์์ ์๊ฐ์ด ์ ์ผ ์ด๋ฅธ ๊ฐ์ ๊ณ ๋ฅด๊ธฐ : $O(1)$
- ๊ต์ค ๋ฐฐ์น : ๊ฐ ๊ต์ค๋ณ๋ก ๋ง์ง๋ง์ผ๋ก ๊ฐ์๊ฐ ๋๋๋ ์๊ฐ์ ์ ์งํ๋ ๋ฐฉ๋ฒ์ผ๋ก ํ์ฌ ๋ง๋ค์ด์ง ๊ต์ค์ด d๊ฐ์ธ ๊ฒฝ์ฐ ๊ฐ์ ํ๋๋น O(d)์ ์๊ฐ์ด ์์๋ฉ๋๋ค.
ํ๋ฒ ๊ฒ์ฌํ ๊ฐ์๋ ๋ค์ ๊ฒ์ฌํ์ง ์์ผ๋ฏ๋ก ์ด ์ํ ์๊ฐ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$$O(n \; log \; n + nd) = O(n^2)$$
๐ง ์๊ฐ ๋ณต์ก๋ ํฅ์์ํค๊ธฐ
priority queue๋ฅผ ์ด์ฉํ์ฌ ์๊ฐ ๋ณต์ก๋๋ฅผ ํฅ์์ํฌ ์ ์์ต๋๋ค.
์ด๋ ์ฐ์ ์์๋ ํด๋น ๊ต์ค์์ ๋ง์ง๋ง ๊ฐ์๊ฐ ๋๋๋ ์๊ฐ์ผ๋ก ์ค์ ํฉ๋๋ค.
์๋ก์ด ๊ฐ์๋ ๋ง์ง๋ง ๊ฐ์๊ฐ ๋๋๋ ์๊ฐ์ด ์ ์ผ ๋น ๋ฅธ ๊ต์ค์ ๋ฐฐ์น ํ ์ ์๋ ๊ฒฝ์ฐ ์๋ก์ด ๊ต์ค์ ๋ฐฐ์ ํด์ผ ํฉ๋๋ค.
ํ์ฌ ๊ฐ์๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ธฐ์กด ๊ต์ค์ ๋ฐฐ์ ํ ์ ์๋์ง ์ฒดํฌํ๋ ๊ฒ์ priority queue์ findmin ์ฐ์ฐ์ ์ฌ์ฉํ์ฌ ์ํํ ์ ์์ต๋๋ค.
์๋ก์ด ๊ต์ค์ ๋ฐฐ์ ํ๋ ๊ฒ์ insert ์ฐ์ฐ์ ์ฌ์ฉํฉ๋๋ค. $O(log \; n)$
ํ์ฌ ๊ฐ์๋ฅผ ๊ธฐ์กด ๊ต์ค์ ๋ฐฐ์นํ๋ ๊ฒ์ ๊ธฐ์กด ๊ต์ค์์ ๋ง์ง๋ง ๊ฐ์๊ฐ ๋๋๋ ์๊ฐ์ ์ ๋ฐ์ดํธ ํด์ฃผ๋ ๊ฒ์ด๋ฏ๋ก findmin + decreasekey ์ ์ฐ์ฐ์ ํตํด ์ํํ ์ ์์ต๋๋ค. $O(1) + O(log \; n)$
๋ฐ๋ผ์ ํ์ฌ ๊ต์ค์ด d๊ฐ์ผ ๋, ๊ฐ์ ํ๋๋ฅผ ๋ฐฐ์นํ๋๋ฐ ์ต๋ $O(log \; d)$ ์๊ฐ์ด ์์๋ฉ๋๋ค.
๋ฐ๋ผ์ ์๊ณ ๋ฆฌ์ฆ์ ์ด ์ํ ์๊ฐ์ $O(n \; log \; n)$ ์ผ๋ก ์ค์ด๋ค ์ ์์ต๋๋ค.
'๐ฅ Computer Science > ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ] DP (0) - DP ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ (0) | 2022.11.09 |
---|---|
[์๊ณ ๋ฆฌ์ฆ] ๊ทธ๋ฆฌ๋ (3) - Huffman Encoding(ํํ๋ง ๋ถํธํ) (0) | 2022.10.21 |
[์๊ณ ๋ฆฌ์ฆ] ๊ทธ๋ฆฌ๋ (1) - ์ต์ ์ ์ฅ ํธ๋ฆฌ (Minimum Spanning Tree) (0) | 2022.10.21 |
[์๊ณ ๋ฆฌ์ฆ] ๊ทธ๋ฆฌ๋ (0) -๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ (0) | 2022.10.13 |
[์๊ณ ๋ฆฌ์ฆ] ์ ๋์จ ํ์ธ๋(Union-Find) ์๋ฃ๊ตฌ์กฐ (0) | 2022.10.03 |