๊ตญ๋ฏผ๋ํ๊ต์์ "์ฝ๊ฒ ๋ฐฐ์ฐ๋ ์๊ณ ๋ฆฌ์ฆ" ๊ต์ฌ๋ฅผ ์ด์ฉํ
๋ฐํ๋ช ๊ต์๋์ ๊ฐ์ ๊ต์์ ์ด์ฉํ์ฌ ์์ ๋ด์ฉ์ ์ ๋ฆฌํ์์ต๋๋ค
Greedy Algorithm ๊ฐ์
Algorithmic Paradigms
- Brute-force methods
=> ๊ฐ๋ฅํ ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ์ดํด๋ณด๊ธฐ - Divide and conquer
=> ๋ฌธ์ ๋ฅผ ์์ ๋ฌธ์ ๋ก ๋ถํ ํ์ฌ ์ฌ๊ท์ ์ผ๋ก ํด๊ฒฐ - Dynamic programming
=> ์์ ๋ฌธ์ ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ๋ชจํด๋๊ณ ์ฌํ์ฉ
์ค๋ ๋ค๋ฃฐ ์ฃผ์ ๋ Greedy algorithms ์!
Greedy Strategy
์ง๊ธ ๋น์ฅ ๊ฐ์ฅ ์ข์๋ณด์ด๋ ๊ฒ์ ์ ํํ๋ ์ ๋ต์
=> ๋ฏธ๋์ ์ํฉ์ ๊ณ ๋ คํ์ง ์์
Greedy Algorithm ์ด๋
์ต์ ํด๋ฅผ ํญ์ ๋ณด์ฅํ์ง๋ ์์
ํ์ฌ์ ์ ํ์ด ๋ฏธ๋์ ๋ฏธ์น ์ํฅ์ ๊ณ ๋ คํ์ง ์๊ธฐ ๋๋ฌธ์
Local optimum => Global optimum ์ด ๋๋๊ฒ ๋ณด์ฅ X
ํ์ง๋ง, greedy strategy๋ก ์ต์ ํด๋ฅผ ์ฐพ์ ์ ์๋ ๋ฌธ์ ๋ ์กด์ฌ!
Greedy Algorithm์ด ์ต์ ํด๋ฅผ ์ฐพ๊ธฐ ์ํ 2๊ฐ์ง ์กฐ๊ฑด
1. Greedy-choice property
=> ํ์ฌ์ ์ต์ ์ ์ ํ์ด ์ต์ ํด์ ๊ธฐ์ฌํจ
2. Optimal sub-structure property
=> ์์ ๋ฌธ์ ์ ์ ๋ต์ด ํฐ ๋ฌธ์ ์ ์ ๋ต์ ํฌํจ๋จ
๋ํ์ ์ธ Greedy Algorithm ๋ฌธ์ ๋ค
1. ๊ฑฐ์ค๋ฆ๋ ๋ฌธ์
https://www.acmicpc.net/problem/5585
500์, 100์, 50์, 10์, 5์, 1์ ์ง๋ฆฌ ๋์ ์ด ์ถฉ๋ถํ ์๋ ์ํฉ์์
Greddy strategy๋ก ์๊ฐํด๋ดค์ ๋ ๊ฐ์น๊ฐ ํฐ ๋์ ๋ถํฐ ์ฌ์ฉํ๋ฉด ๋จ
1. ๋จ์ ์๋๋ณด๋ค ๊ฐ์น๊ฐ ๋ฎ์ ๋์ ์ค ๊ฐ์ฅ ํฐ ๋์ ์ ์ฌ์ฉ (greedy choice)
2. ๋จ์ ์๋์์ ์ฌ์ฉํ ๋์ ์ ๊ฐ์ ๋บ
์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ฉด ๋๋ค!
Greedy-choice property
๊ฑฐ์ค๋ฆ๋์ด 500์๋ณด๋ค ํฌ๋ฉด, 500์ ๋์ ์ ์ฌ์ฉํ๋ ์ต์ ํด๊ฐ ๋ฐ๋์ ์กด์ฌํจ
=> 500์ ๋์ ์ ์์ฐ๋ฉด, 500์์ ๋ง๋ค๊ธฐ ์ํด ๋ ์์ ๋์ ์ ๋ง์ด ์ฌ์ฉํด์ผํจ
Optimal sub-structrue property
๊ฑฐ์ค๋ฆ๋ x์ ๋ํ ์ต์ ํด S(x)๋
S(x) = S(x - 500) + 1 if x > 500
๋ง์ฝ ๋์ ์ด 500, 100, 50, 10 ... ์ด ์๋๋ผ 500, 300, 70, 30 ... ์ด๋ผ๋ฉด?
๊ฒฐ๋ก ์ ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ธ ์ ์์
์๋ํ๋ฉด 500, 100, 50, 10.. ์ ๊ฒฝ์ฐ ๋ฐฐ์์ ํํ๋ฅผ ๋ ๊ณ ์๊ธฐ์ 500์์ด ๋ ์์ ๋์ ๋ค์ ํฉ์ผ๋ก ์ด๋ฃจ์ด์ง ์ ์๋ค๋๊ฒ ๋ณด์ฅ๋จ
(์ด ๊ฒฝ์ฐ ๊ฐ์ฅ ๊ฐ์น๊ฐ ํฐ ๋์ ๋ถํฐ ์ฌ์ฉํ๋ฉด ์ต์ ํด๊ฐ ๋ณด์ฅ)
ํ์ง๋ง 500, 300, 70, 30 .. ์ ๊ทธ๋ ์ง ์๊ธฐ์ ์ต์ ํด๋ฅผ ๋ณด์ฅํ ์ ์์!
์๋ฅผ๋ค๋ฉด 600์์ ๋ฐ์์ผ ํ๋ ์ํฉ์์ ๊ทธ๋ฆฌ๋๋ฅผ ์ฌ์ฉํ๋ฉด
500์ + 70์ + 30์์ผ๋ก ์ด 3๊ฐ์ ๋์ ์ ์ฌ์ฉํ๋๋ฐ
์ต์ ํด์ ๊ฒฝ์ฐ 300์ + 300์์ผ๋ก ์ด 2๊ฐ์ ๋์ ์ ์ฌ์ฉํ๋ ๊ฒ์ ๋ณผ ์ ์์
2. ํ์์ค ๋ฐฐ์ ๋ฌธ์
https://www.acmicpc.net/problem/1931
๊ฐ๋ฅํ ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ์กฐ์ฌํ๋ ๋ฐฉ๋ฒ์ ๊ฒฝ์ฐ์ ์๊ฐ 2^N ์ด๋ฏ๋ก ๋นํ์ค์ ์
์ด์ ๋ฐ๋ผ ์ฌ๋ฌ ์ ๋ต์ ์๊ฐํด๋ณผ ์ ์๋๋ฐ
1. ์๊ฐ์ด ์งง์ ํ์๋ถํฐ ์ ํํ๊ธฐ
=> ์ต์ ํด๋ฅผ ๋ณด์ฅํ์ง ์์
2. ํ์ ์์ ์๊ฐ์ด ๋น ๋ฅธ ๊ฒ๋ถํฐ ์ ํํ๊ธฐ
=> ์ต์ ํด๋ฅผ ๋ณด์ฅํ์ง ์์
3. ํ์ ์ข ๋ฃ ์๊ฐ์ด ๋น ๋ฅธ ๊ฒ๋ถํฐ ์ ํํ๊ธฐ
์ง๊ธ๊น์ง ์ ํํ ํ์์ ์๊ฐ์ด ๊ฒน์น์ง ์๋ ํ์ ์ค ํ์ ์ข ๋ฃ ์๊ฐ์ด ๊ฐ์ฅ ๋น ๋ฅธ ํ์๋ฅผ ์ ํ
=> ์ต์ ํด ๋ณด์ฅ
Greedy-choice property
์ข ๋ฃ์๊ฐ์ด ๊ฐ์ฅ ๋น ๋ฅธ ํ์๋ฅผ ํฌํจํ๋ ์ต์ ํด๊ฐ ๋ฐ๋์ ์กด์ฌ
์ข ๋ฃ ์๊ฐ์ด ๋น ๋ฅธ ์์๋๋ก ํ์-A, ํ์-B .. ๋ผ๊ณ ๊ฐ์ ํ๋ฉด ํ์-A๋ฅผ ํฌํจํ์ง ์๋ ์ต์ ํด T๊ฐ ์๋ค๊ณ ๊ฐ์
=> T์ ํฌํจ๋ ํ์ ์ค ์ข ๋ฃ ์๊ฐ์ด ๊ฐ์ฅ ๋น ๋ฅธ ํ์๊ฐ ํ์-X๋ผ๋ฉด T์์ ํ์-X๋ฅผ ๋นผ๊ณ ํ์-A๋ฅผ ๋ฃ์ ํด T'๋ ์ต์ ํด์
Optimal sub-structure property
์ ์ฒด ํ์ ์งํฉ์ด A์ด๊ณ , ์ข ๋ฃ์๊ฐ์ด ๊ฐ์ฅ ๋น ๋ฅธ ํ์๊ฐ a1 = (s1,e1) ์ด๋ผ๋ฉด ์ต์ ํด S(A)๋
S(A) = S({ai∈A | si≥e1}) + 1
'๐ฅ Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
L11 - Minimum Spanning Trees (0) | 2024.11.26 |
---|---|
L10 - Disjoint Sets (0) | 2024.11.22 |
L07 - Selection (4) | 2024.10.13 |
L06 - Non-comparison Sorting (2) | 2024.10.08 |
L05 - Heapsort (2) | 2024.10.06 |