ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Greedy Algorithm
    알고리즘 2020. 3. 17. 16:04

    Greedy Algorithm 탐욕 알고리즘

    • 개념 :  최적해를 구하는 데에 사용되는 근사적인 방법. 여러 경우 중 하나를 결정해야 할 때마다 그 순간에 최적이라고 생각되는 것을 선택해 나가는 방식으로 진행하여 최종적인 해답에 도달한다.
    •  (미래를 생각하지 않고 각 단계에서 최선의 선택을 함)

    • 그리디 알고리즘으로 최적의 해를 구할 수 있는 문제가 많지는 않다.
    • 그리디 알고리즘이 사용되는 경우 ->   탐욕법을 사용해도 항상 최적해를 구할 수 있는 문제를 만난 경우 (DP보다 수행시간 훨씬 빠르므로 유용)


    • 예시 문제 ① : 동전 개수

            10, 50, 100, 500원짜리 동전들을 이용하여 어떤 금액을 표현하자

            이때 각 동전은 무수히 많은 대신 동전 개수를 최소 사용해야 한다.


            풀이>> 무조건 사용할 수 있는 한 가장 큰 금액의 동전을 많이 사용하면 된다.


    •     예시 문제 ② : 도시락 

            N개의 도시락이 있고, 전자레인지는 단 한 대만 존재하며 한 번에 하나의 도시락만 데울 수 있고, 각 도시락은 조리 시간과 먹는 시간이 다르게 정해져 있다. 이때 도시락을 적절한 순서로 조리하여 첫 번째 도시락을 데우기 시작한 순간부터 모든 도시락을 먹는 데 걸리는 시간이 최소가 되게 해야 한다. (다 데운 도시락은 바로 누군가가 먹는다.)

         

         풀이 >> 먹는 데 시간이 오래 걸리는 도시락부터 순서대로 데운다.

         이유 >> 도시락을 데우고 나서 바로 다른 도시락을 데우는 걸 반복하고, 각 도시락을 데우는 시간은 정해져 있으므로 우리는 도시락을 데우는 시간을 줄일 수 없다.

                     그러나 만약 마지막으로 데운 도시락을 먹는 데 오랜 시간이 걸린다면 전체 시간이 길어질 것이므로 오래 걸리는 것을 먼저 데우고 먼저 먹기 시작하는 것이 좋다.


    •     예시 문제 ③ : 멀티탭 스케줄링

            멀티탭 구멍의 개수가 N개가 있다. 근데 전기 용품은 K개가 있고 전기 용품들의 사용 순서를 알고 있을때, 플래그를 빼는 횟수를 최소화 해야 한다. 


            풀이 >> 사용 순서를 알고 있으니 이미 꽂혀있는 전기 용품들 중 가장 나중에 사용하는 전기 용품을 뽑는다.


    '알고리즘' 카테고리의 다른 글

    Lazy propagation  (0) 2020.03.17
    Segment Tree  (0) 2020.03.17
    Floyd-Warshall  (0) 2020.03.17
    Dijkstra  (0) 2020.03.17
    Binary Serach  (0) 2020.03.16

    댓글

Designed by Tistory.