동적 프로그래밍(DP) 을 사용할 때 너무 많은 작업을 하는 경우가 발생하기에 보완하는 목적으로 생김
차이점 : 그리디 알고리즘은 미래를 생각하지 않고 각 단계에서 최선의 선택을 하는 방법
활동 선택 문제 (Activity Selection Problem)
활동 선택 문제란, 한번에 하나의 활동만 처리할 수 있는 하나의 방에서 주어진 활동들에서 최대한 많은 활동을 처리할 수 있는 스케줄을 짜는 문제입니다.
문제를 해결하는 아이디어로는 보통 평범하게는 활동시간이 짧은 순으로 정렬하여 짧은 것부터 선택하는 등의 방법들을 생각할 수 있지만, 최적의 방법은 끝나는 시간순으로 선택하면 됩니다.
허프만 부호화 (Huffman Coding)
문자의 빈도나 확률 정보 등을 이용하여 통계적으로 압축하는 방법
- 압축할 문자열에서 각 문자의 빈도 수 계산
- 빈도 수를 우선 순위로 최소 힙을 구성한다
- 빈도 수가 가장 작은 두 노드를 삭제하고, 삭제한 두 노드로 트리 구성 (작은 것을 왼쪽 자식, 큰 것을 오른쪽 자식)
- 노드가 하나 남을 때까지 반복, 마지막 노드가 루트 노드가 된다
이 과정을 통해 출현 빈도가 높은 문자는 더 빠른 탐색 시간을 갖게 된다.
- 예시 문제
- 해결법
슈도코드
Huffman( C [ 1...n ] ){
Q =c;
for( i =1 to n-1 ){
Z= new internal tree node;
Z.left = X = Q.extractMin() //최소 가능성 추출
Z.right = Y = Q.extractMin() //최소 가능성 추출
Z.prob = X.prob + Y.prob //부모 노드에 자식 노드 확률 합 저장
Q.insert(Z)
}
return Q의 마지막 원소의 left
}
반응형
'미가공 필기(알고리즘)' 카테고리의 다른 글
210708 너비 우선 탐색(BFS) & 깊이 우선 탐색(DFS) (0) | 2021.07.09 |
---|---|
210707 DP - 배낭 문제 (Knapsack Problem) (0) | 2021.07.08 |
210706 동적 계획법(DP) 2- LCS ,OBST (0) | 2021.07.07 |
210705 동적 계획법(Dynamic Programming, DP) (0) | 2021.07.06 |
210701 레드 블랙 트리(Red-Black Tree) (0) | 2021.07.05 |
댓글