PromleeBlog
sitemap
aboutMe

posting thumbnail
소스 코딩
Source Coding

📅

🚀

개요 (Introduction) 🔗

  1. 소스 심볼은
    이진수
    로 인코딩 되어야 한다.
  2. 평균 코드 길이는 최소화되어야 한다.
  3. 중복 제거 \rightarrow 비트율 감소




🚀

데이터 압축을 위한 소스 코딩 체계(Source Coding Schemes for Data Compression) 🔗

접두사 코딩(Prefix Coding) 🔗

다른 코드의 접두어가 아닌
가변 길이 소스 코드
➡️

예시 (접두사 코드) 🔗

심볼발생 확률코드 I코드 II코드 III
s00.5000
s10.2511001
s20.12500110011
s30.125111110111
Code1: 접두사 코드 X
Code2: 접두사 코드 O
Code3: 유일하게 복호화 가능 but 접두사 코드 X - 다음 코드의 시작을 구분하기 힘들다
ex) Code2
0101110111 -> 0/10/111/0/111 -> unically decodable(유일하게 복호화 가능)
결정 트리
image
임의의 심볼 sks_k는 확률 pk=2lkp_k=2^{-l_k}로 발생

🚀

* 허프먼 코딩 (Huffman Coding) 🔗

중요

허프먼 코딩 알고리즘 🔗

데이터 압축에 자주 사용되는 방법으로, 자주 등장하는 기호에는 짧은 부호를 할당하고 드물게 등장하는 기호에는 긴 부호를 할당하여
데이터를 압축
한다.
  1. 기호 확률을 감소하는 순서로 배열 후 트리의 리프 노드로 간주
  2. 노드가 하나 이상 남을 때 까지 다음을 반복
    • 가장 낮은 확률을 가진 두 노드를 선택 후 가장 낮은 노드에는 0, 높은 노드에는 1을 할당(반대도 가능, but 일관적이어야 함)
    • 두 노드를 병합하여 하나의 노드 생성, 그 확률은 두 노드의 확률의 합이 됨
    • 1단계로 돌아가기
  3. 각 기호에 대해, 리프 노드에서 트리의 루트까지의 경로를 따라 이진 코드 생성
    • 리프 노드의 비트는 부호어(codeword)의 마지막 비트가 된다.

허프먼 코드의 특징 🔗

접두사 코드
각 기호의 부호어 길이는 전달하는 정보의 양과 대략 같다
확률 분포가 알려지고 정확할 경우, 허프먼 코드는 매우 효과적임

허프먼 트리 구성 예시 (Example of Huffman Tree Construction) 🔗

image
image
두 트리 모두 같은 평균 길이를 가지지만
분산
은 다르다.