예를 들어 , 아래의 그림에서
- 트리에서 어떤노드의 패스 크기란?
- 루트에서 해당 노드까지 오는데 까지의 브랜치 수를 말한다.
내부패스 크기(I)=0+1+1+2+2=6
- A 노드의 패스 크기는 0
- B 노드의 패스 크기는 1
- C 노드의 패스 크기는 1
- D 노드의 패스 크기는 2
- E 노드의 패스 크기는 2
(1) 외부 패스란?
널 링크에 가상의 노드(실패 노드)가 있다고 가정할 때, 이 실패노드까지 오는 경로를 외부 패스라한다.아래 이진 트리의 외부 패스는
널 링크에 실패노드(사각형 박스)를 붙인 후 , 각 사각형까지의 브랜치수를 합한 것이 외부 패스의 크기가 된다.
∴ 외부 패스의 크기(E)=3+3+2+2+3+3=16
이진 트리에서 내부 패스의 크기(I)와 외부 패스의 크기(E)는 항상 다음과 같은 성질을 만족한다.
E = I + 2*n(2) 가중치를 가지는 외부 패스의 크기
아래 그림과 같이 실패노드에 가중치가 있을 때의 패스의 외부 크기를 알아보자.
E = 4*3 + 3*3 + 2*2 + 1*2 + 1*2 =12 + 9 + 4 + 2 + 2=29
huffman code 란 외부패스의 크기를 최소로 하는 방법으로 , 가장 작은 데이터 두 개를 선택해서 하나로 합치면서 진행하는 방법(greedy method) (이렇게 하면 최소 외부 패스가 나오는다는 것은 조금 고민해 봐야 할 듯)(보기) 외부 패스의 크기가 아래와 같을 때 가장 작은 크기의 외부 패스 크기를 구하는 문제이다.
1 1 2 3 4(풀이)
- 1,1,2,3,4 중 작은 데이터 두 개를 하나로 합친다.
- 2 , 3 ,4 중 작은 데이터 두 개를 하나로 합친다.
- 4 , 5 중 작은 데이터 두 개를 하나로 합친다.
(유제) 다음과 같은 가중치를 가질 때의 최소의 외부 패스 크기는?
1 2 3 4 5(답) 33
acaabc 문자열을 압축하려고 한다. 방법은 각 문자에 이진수를 할당해서 문자열을 압축하려고 한다. 빈도수가 가장 많은 문자에 비트 수를 가능한 짧게 하는게 압축된 사이즈가 줄일 수 있다. 문자 a 가 의 빈도수가 3 문자 b 의 빈도수가 1 문자 c 의 빈도수가 2 이니 a 에 0 을 b 에 01 을 c 에 1 을 할당 했다고 하자. 그런 후 이 문자열을 압축하면 0100011 자 그리면 a 가 0 b 가 01 c 가 1 과 압축된 0100011 로 원래 문자열을 acaabc 를 결정적으로 해독할 수 있는가?
출처:dovelet