[TIL]230602 - 알고리즘 13주차: Greedy Algorithm

Jimin·2023년 6월 3일
0

Greedy vs. Dynamic Programming

  • 배낭 문제는 그 차이의 좋은 예
  1. 0-1 배낭 문제: Greedy로 해결할 수 없음
  • 예) 가게를 털던 도둑이 n개의 물건을 찾았습니다. i번째 아이템은 $vi의 가치가 있고 무게는 파운드입니다. 그는 배낭에 최대 W파운드까지 실을 수 있습니다. 그러면, vi, wi, W는 정수입니다. 그는 어떤 물건을 가져가야 합니까?
    • 총 중량이 ≤ W인 항목의 가장 귀중한 부분 집합을 찾음
    • 물건을 가져가야 할지 안 가져가야 할지도 모름. 그것을 가져갈 수가 없음
  1. 부분 배낭 문제: Greedy로 해결 가능
  • 0-1 배낭 문제처럼, 하지만 항목의 일부를 차지할 수 있음

공통점과 차이점

  • 둘 다 최적의 하부 구조를 가지고 있습니다.
  • 그러나 부분 배낭 문제는 탐욕스러운 선택의 속성을 가지고 있고 0-1 배낭 문제는 그렇지 않습니다.
  • 분수 문제를 해결하려면 값/무게: vi/wi를 기준으로 항목의 순위를 지정합니다.
  • 모든 i에 대해 vi / wi ≥ v(i+1) /w(i+1)

부분 배낭 문제 예시

  • 실행 시간: 정렬 - O(nlgn), 이후 O(n).

허프만 코드 (Application of Greedy Algorithm)

  • 데이터 압축 기술 - 널리 사용되고 효과적
  • 문제: 정보 손실 없이 파일을 압축하는 방법은 무엇입니까?
  • 압축은 공간뿐만 아니라 시간도 절약함
  • 이진 문자 코드 사용

  • 탐욕 알고리즘을 적용하여 허프먼이 발명한 최적의 접두사 코드
  • 이 알고리즘은 최적의 코드에 해당하는 트리 T를 상향식으로 구축함
  • 그것은 일련의 |C| 잎으로 시작하고 최종 트리를 만들기 위해 |C| -1 병합 작업의 시퀀스를 수행함
  • 키를 누른 최소 우선순위 큐 Q는 함께 병합할 가장 빈도가 낮은 두 개체를 식별하는 데 사용됨
  • 두 개체의 병합 결과는 병합된 두 개체의 주파수 합계인 주파수를 가진 새 개체임

허프만 코드 예제

허프만 코드 분석

  • Q가 이진 최소 힙으로 구현된다고 가정
  • n개 문자 집합 C의 경우,
  • BUILD-MIN-HEAP 절차를 사용한 Q(라인 2) – O(n)의 초기화
  • 루프(3~8행)의 경우 => O(nlgn)
    • 정확한 n-1회 실행
    • 각 힙 작업 – O(lgn)
  • n자 집합의 총 실행 시간 -> O(nlgn)

0개의 댓글