알고리즘

[알고리즘 #5] Problem Solving Paradigms(2)

우당탕탕코딩일기 2023. 4. 19. 03:11

Greedy Algorithms

: 매 과정마다 현재 상태에서 최적의 해를 만드는 것을 선택해 나가는 방법

- Greedy Algorithm 동작하기 위해서는 다음 두가지 조건을 만족해야 한다.

1. Local optimum 의 존재

2. 이것을 greedy 한 방법으로 global optimal solution 에 도달 가능하다는 것을 증명가능해야함

 

그리디 알고리즘 예시 : 크루스칼, 다익스트라, Huffman code , 스케줄링

 

입력 사이즈가 커서 다른 방법이 통하지 않을 것처럼 보이면 greedy 를 우선적으로 고려해볼 만하다.

문제에서 greedy algorithm 을 사용할 수 있는지 애매한 경우 보통 입력 데이터를 sorting 하면 문제가 해결되는지 여부로 어느 정도 파악 가능하다.

 

ex) Uva 410_ Station Balance

 

ex) Uva 10382_ Watering Grass

 

ex_ Uva 10718 _ Bit Mask

 

Dynamic Programming

Recursion + Memoization 

단순 테이블 채우기가 아닌 memoization 이용해 recursion 을 효율저긍로 수행하는 기법

 

1. 문제를 정확하게 정의하기

2. 정의된 문제에 대한 subproblem 을 생각한 뒤 이를 이용해 recurrence relation 을 세우기

 

3. Memoization 이용하여 recurrence relation 계산

- 중간 결과물을 저장할 data structure 고르기 : 보통 n차원 array

- subproblem 들 간의 dependency 확인

- dependency  에 기반하여 subproblem 의 답을 구하는 순서를 정하기 

 

ex) Uva 11450 _ Wedding Shopping

 

 

ex) Uva_ 10003 _ Cutting Sticks

 

 

ex) Uva 10755 _ Garbage Heap

728x90