(2021.11.08)
알고리즘 수업들으면서 정리하기 18탄
w10-2 녹화강의
huffman code 개념, 만드는 방법, greedy 알고리즘
Huffman codes
- each character를 binary charcter code로 디자인하는 것
- optimal prefix code 라고도 한다.
- huffman code는 빈도수에 따라서 설정해준다.
- huffman code는 variable-length code이며, fixed-length code보다 효율적이다.
- (fixed-length code는 3비트로 표현한다--> 많은 저장용량을 차지한다.)
- prefix-free code (prefix code)
huffman code의 가장 큰 특징은 prefix-free code(prefix code)이다.
prefix는 전위부를 뜻하는데 말 그대로 앞부분이라는 뜻이다.
prefix-free code를 사용하면, 코드를 보고 어떤 문자인지 알아내는데에 모호함이 없다.(ambiguity)
Every message encoded by a prefix code is unambiguous
Building Huffman codes
- Huffan codes는 tree를 이용해서 만든다.
- tree는 밑에서부터 만들고, n개의 character라면 n개의 leaves가 된다.
- key는 빈도수
- leaves들은 tree로 병합된다. n-1 번의 merging operations.
- merger의 결과 = 두 개의 nodes의 빈도수의 합
- C = n개의 character들의 집합 ( C= { c | c는 character } )
- f[c] = c character의 빈도수
Huffman buliding 과정
- 각 character에 대한 leaf node를 생성하고, frequency에 따라 min priority queue에 넣는다.
- character가 1개 초과일 때(2개 이상)만 반복(while 문: 3~5 반복)
- 가장 빈도수가 낮은 2개의 노드를 제거한다. (x와 y)
- f[z] = f[x] + f[y] 를 계산해서 부모 node z 를 생성한다. c.
- 이 node를 queue에 추가한다.
- 마지막 node가 root node가 된다.
Performance of greedy Huffman code
Greediness of Huffman codes
결론적으로, Huffman code는 그때 그때 가장 작은 frequency 2개를 골라 tree를 만드는 것이기 때문에 greedy choice라고 할 수 있고, Huffman code의 subtree는 모두 huffman tree의 조건을 만족하기 때문에 optimal substructure 이라고 할 수 있다.
- Greedy choice property : if x and y have the two lowest counts, then the optimal algorithm will have them at the same path length (their codes are two of the longest)
- Optimal substructure : every subtree of a Huffman code defines an optimal code for its leaf characters
728x90
'Computer Science > algorithms' 카테고리의 다른 글
[알고리즘] Minimum Spanning Tree : Generic algorithms & Prim algorithms (3) | 2021.11.17 |
---|---|
[알고리즘] Network flow : BFS & DFS (0) | 2021.11.12 |
[알고리즘] Greedy algorithm (0) | 2021.11.04 |
[알고리즘] Activity Selection : greedy algorithm (0) | 2021.11.03 |
[알고리즘] Activity selection : 정의 & d.p algorithm (0) | 2021.10.27 |