04. 그리디(Greedy) 알고리즘

2021. 5. 3. 22:58·Algorithm/알기 쉬운 알고리즘

  • 알기쉬운 알고리즘(양성봉 저, 생능 출판) 책을 바탕으로 작성한 내용이다.

04. 그리디(Greedy) 알고리즘

  • 최적화 문제를 해결하는 알고리즘이다.

  • 입력 데이터 간의 관계를 고려하지 않고, 수행 과정에서 최솟값 또는 최댓값을 가진 데이터를 선택한다.

    • 근시안적 선택으로 부분적인 최적해를 찾고, 이를 모아서 문제 전체의 최적해를 찾는다.
  • 한번 선택하면 번복하지 않아서 알고리즘들이 비교적 단순하다.


4.1 동전 거스름돈

  • 거스름돈의 동전 개수를 가장 적게 받는 방법

  • 남은 액수를 초과하지 않는 조건에서 가장 큰 액면의 동전을 취하는 방법을 사용한다.

    Pseudo Code

    int CountCoin(int change)
    {
      int n500 = n100 = n50 = n10 = n1 = 0;
      while (change >= 500)
      {
        change -= 500;
        n500++;
      }
      while (change >= 100)
      {
        change -= 100;
        n100++;
      }
      while (change >= 50)
      {
        change -= 50;
        n50++;
      }
      while (change >= 10)
      {
        change -= 10;
        n10++;
      }
      while (change >= 1)
      {
        change -= 1;
        n1++;
      }
      return (n500 + n100 + n50 + n10 + n1);
    }
  • 만약 160원짜리 동전이 추가된다면, 이 알고리즘은 최적해를 보장하지 못한다.

    • 어떤 경우에도 최적해를 찾고 싶으면 동적 계획 알고리즘을 사용해야 한다.

4.2 최소 신장 트리(Minimum Spanning Tree)

4.3 최단 경로 찾기(Shortest Path)

4.4 부분 배낭 문제(Fractional Kanpsack Problem)

4.5 집합 커버 문제(Set Cover Problem)

4.6 작업 스케줄링(Task Scheduling)

4.7 허프만 압축(Huffman Coding)

저작자표시 (새창열림)

'Algorithm > 알기 쉬운 알고리즘' 카테고리의 다른 글

작업 스케줄링(Task Scheduling)  (0) 2021.05.03
집합 커버 문제 (Set Cover Problem)  (0) 2021.05.03
부분 배낭 문제 (Fractional Kanpsack Problem)  (0) 2021.05.03
최단 경로 찾기(Shortest Path)  (0) 2021.05.03
최소 신장 트리(Minimum Spanning Tree)  (0) 2021.05.03
'Algorithm/알기 쉬운 알고리즘' 카테고리의 다른 글
  • 작업 스케줄링(Task Scheduling)
  • 집합 커버 문제 (Set Cover Problem)
  • 부분 배낭 문제 (Fractional Kanpsack Problem)
  • 최단 경로 찾기(Shortest Path)
Caniro
Caniro
  • Caniro
    Minimalism
    Caniro
  • 전체
    오늘
    어제
    • 분류 전체보기 (317)
      • Algorithm (13)
        • 알기 쉬운 알고리즘 (10)
        • Search (1)
        • Sort (2)
      • Arduino (0)
      • C++ (185)
        • Class (46)
        • Exception (6)
        • Library (51)
        • Overloading (10)
        • SmartPointer (5)
        • Syntax (33)
        • TBC++ (23)
        • Templates (9)
        • VisualStudio (2)
      • Embedded (1)
      • Git (4)
      • Java (5)
      • Linux (16)
        • Error (1)
        • Linux Structure (11)
      • MacOS (7)
      • OS (1)
        • Concurrency (1)
      • Python (21)
        • Class (1)
        • Function (2)
        • Syntax (17)
      • Raspberrypi (9)
      • Review (1)
      • Utility (12)
        • VSCode (5)
        • VirtualBox (3)
      • Web (8)
        • Nginx (1)
        • React (3)
        • Django (1)
      • Windows (20)
        • Registry (3)
        • WSL (1)
        • DeviceDriver (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Windows 11
    SFC
    맥북 카카오톡 알림 안뜸
    MacOS
    dism
    mspaint
    EXCLUDE
    KakaoTalk
    windows
    unix
    스프링 프레임워크 핵심 기술
    Solaris 10
    윈도우 명령어
    vscode
    logi options
    그림판
    SunOS 5.1
    로지텍 마우스 제스처
    spring
    citrix workspace
    윈도우
    Workspace
    스프링
    java
    시스템 복구
    백기선
    알림
    제외
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Caniro
04. 그리디(Greedy) 알고리즘
상단으로

티스토리툴바