Computer Science/DS & Algorithm

Greedy: νƒμš•λ²•

geum 2021. 2. 23. 00:35

 

κ°œλ…

맀 μˆœκ°„λ§ˆλ‹€ κ·Έ μƒν™©μ—μ„œ κ°€μž₯ 졜적인 선택을 ν•˜λŠ” 방식. 각 λ‹¨κ³„μ—μ„œ λ‚΄λ¦° 결정이 μ „μ²΄λ‘œ 봀을 λ•Œλ„ 졜적일 κ±°λΌλŠ” 보μž₯은 μ—†λ‹€.

좜처 : wikipedia

μœ„ 사진을 μ°Έκ³ ν•˜μ—¬ μ„Έ 숫자의 합이 κ°€μž₯ 컀질 수 μžˆλŠ” 경우λ₯Ό μƒκ°ν•΄λ³΄μž. μ‹€μ œλ‘œ κ°€μž₯ 큰 μˆ˜λŠ” 109μ§€λ§Œ Greedy algorithm의 결과둜 λ‚˜μ˜¨ 값은 25κ°€ λœλ‹€. μ—¬κΈ°μ„œ 첫 μ€„μ˜ '맀 μˆœκ°„λ§ˆλ‹€ κ·Έ μƒν™©μ—μ„œ κ°€μž₯ 졜적인 선택을 ν•˜λŠ” 방식'을 λ– μ˜¬λ¦΄ 수 μžˆλ‹€. Greedy algorithm에 λ”°λ₯Έ 숫자 선택 과정은 μ•„λž˜μ™€ κ°™λ‹€.

 

β‘  7μ—μ„œ μ‹œμž‘

β‘‘ 3κ³Ό 12λ₯Ό λ§Œλ‚¬μ„ λ•Œ 더 큰 수인 12 선택(3을 선택할 경우 99둜 갈 수 μžˆμ§€λ§Œ 미래의 선택에 λŒ€ν•΄μ„œ μƒκ°ν•˜μ§€ μ•ŠμŒ)

β‘’ 12μ—μ„œ 5, 6을 λ§Œλ‚¬μ„ λ•Œ 더 큰 수인 6 선택


ν•˜μ§€λ§Œ νƒμš•λ²•μ„ μ΄μš©ν•΄ 항상 λΆ€λΆ„ μ΅œμ ν•΄λ₯Ό ꡬ할 수 μžˆλŠ” 것은 μ•„λ‹ˆλ‹€. Greedy algorithm이 잘 μž‘λ™ν•˜λŠ” λ¬Έμ œλ“€μ„ λ‹€μŒκ³Ό 같은 2가지 쑰건을 λ§Œμ‘±ν•΄μ•Ό ν•œλ‹€.

 

- νƒμš• 선택 속성(ν˜„μž¬μ˜ 선택이 λ‹€μŒμ— 일어날 선택과 무관)

- 졜적 λΆ€λΆ„ ꡬ쑰

 

 

졜적 λΆ€λΆ„ ꡬ쑰

AλΌλŠ” μ§€μ μ—μ„œ Pλ₯Ό 거쳐 BλΌλŠ” μ§€μ κΉŒμ§€ 3가지 경둜λ₯Ό μ΄μš©ν•΄ 갈 수 μžˆλ‹€κ³  κ°€μ •ν•  λ•Œ, A→B μ΅œλ‹¨ κ²½λ‘œλŠ” A→P μ΅œλ‹¨ 거리와 P→B μ΅œλ‹¨ 거리의 합이 될 것이닀. 즉 Aμ—μ„œ P둜 κ°€λŠ” μˆœκ°„μ˜ μ΅œμ ν•΄μ™€ Pμ—μ„œ B둜 κ°€λŠ” μˆœκ°„μ˜ μ΅œμ ν•΄κ°€ μ „μ²΄μ˜ μ΅œμ ν•΄λ₯Ό μ΄λŒμ–΄ λ‚Έλ‹€λŠ” 것을 μ•Œ 수 μžˆλ‹€. 문제의 졜적 ν•΄κ²° 방법이 λΆ€λΆ„ 문제의 졜적 ν•΄κ²° 방법이 λ˜λŠ” ꡬ쑰λ₯Ό 졜적 λΆ€λΆ„ ꡬ쑰라고 ν•œλ‹€. 

 

 

νŠΉμ§•

무쑰건 큰 경우, 무쑰건 μž‘μ€ 경우, 무쑰건 κΈ΄ 경우, 무쑰건 짧은 κ²½μš°μ™€ 같이 κ·Ήλ‹¨μ μœΌλ‘œ λ¬Έμ œμ— μ ‘κ·Όν•˜κΈ° λ•Œλ¬Έμ— μ •λ ¬ 기법과 ν•¨κ»˜ μ‚¬μš©λœλ‹€.

 

 

μ‚¬μš© 예

- κ±°μŠ€λ¦„λˆ 문제(주어진 돈의 λ‹¨μœ„κ°€ μ„œλ‘œμ„œλ‘œ μ•½μˆ˜/배수 관계일 λ•Œ)

- ν™œλ™ 선택 문제(ν•œμ •μ μΈ μžμ›μ„ μ΅œλŒ€ν•œ 많이 μ‚¬μš©ν•˜κΈ° μœ„ν•œ ν˜•νƒœ)

- Dijkstra(κ·Έλž˜ν”„ λ‚΄μ˜ ν•œ μ •μ μ—μ„œ λ‹€λ₯Έ μ •μ μœΌλ‘œ ν–₯ν•˜λŠ” κ°€μž₯ 짧은 경둜 계산)

- Kruskal(사이클이 ν˜•μ„±λ˜μ§€ μ•ŠλŠ” μ‘°κ±΄μ—μ„œ κ·Έλž˜ν”„ λ‚΄μ˜ λͺ¨λ“  정점을 μ΅œμ†Œ λΉ„μš©μœΌλ‘œ μ—°κ²°ν•˜λŠ” 트리)

- Prim(λ°©ν–₯이 μ—†λŠ” μ—°κ²° κ·Έλž˜ν”„κ°€ μ£Όμ–΄μ§ˆ λ•Œ MSTλ₯Ό μ°ΎκΈ° μœ„ν•œ μ•Œκ³ λ¦¬μ¦˜)

- Fractional knapsack problem(짐을 λ‚˜λˆŒ 수 μžˆλŠ” λ°°λ‚­ 문제)

 

 

μ‚¬μš©ν•  수 μ—†λŠ” 예

Greedy algorithm을 μ΄μš©ν•΄ μ΅œμ ν•΄μ— κ°€κΉŒμš΄ κ·Όμ‚¬μΉ˜λ§Œμ„ μΆ”μ •ν•  수 μžˆλ‹€.

 

- 0-1 Knapsack Problem(짐을 λ‚˜λˆŒ 수 μ—†λŠ” λ°°λ‚­ 문제)

- μ™ΈνŒμ› 문제

 

 

πŸ™ ν‹€λ¦° λΆ€λΆ„, μ˜€νƒ€κ°€ μžˆλ‹€λ©΄ νŽΈν•˜κ²Œ λŒ“κΈ€ λ‚¨κ²¨μ£Όμ„Έμš” πŸ™