Coding은 데이터 압축, 암호화, 오류감지 및 수정, 데이터 전송 및 저장에 사용되는 이론이다. 주된 목적은 데이터의 패턴을 분석해서 압축하여 통신을 가능하게 하는 것이다.
1. Source coding: Data compression
데이터 압축의 목적으로 사용되는 coding의 경우, 가장 빈번하게 나오는 결과에는 짧은 표현을, 가장 덜 발생하는 결과에는 상대적으로 긴 표현을 주어 압축한다.
(ex. 모스 부호가 한국인에게는 가장 유명하다)
Definitions
- Source code란 부호화된 데이터라고 보면된다.
- c(x) : codeword of x
- l(x) : c(x)의 길이
- D∗ : D-ary alphabet으로 만들 수 있는 source code의 집합 (유한한 길이)
Code를 평가하는 방법 중 하나는 expected length L(C)를 측정하는 방법이다. L(C)는 code의 optimality를 확인하는 데 사용된다.
L(C)=∑p(x)l(x)
Example.

현재, 4개의 sample을 보여주고 있다. 그러므로 unifom-length codeword라면 log4이므로 2 bits임을 알 수 있다. 문제에서 제시하는 code의 경우 L(C)를 구해보면 1.75 bits이다. 따라서 그냥 바꾼 것 보다 좋다는 것을 알 수 있다.
X의 entropy를 구해보면, H(X)는 1.75 bits임을 알 수 있다. Entropy는 RV X를 최대한 압축한 정보량이므로 codeword compression의 lower bound이다. H(X)=L(C)이므로 제시하는 code는 optimal임을 알 수 있다.
Example.

풀이는 다 적었다.
Example. Morse code

모스부호의 경우, 태생적으로 모든 부호 사이에 space가 있어 optimal은 아니다.
Code에 있어 주요한 개념은 다음과 같다.
- Nonsingularity : x가 다르면 c(x)도 다르다.
- Code extension : c(x)=00, c(y)=11이면 c(xy)=0011이다.
- Uniquely decodable codes : Individual codeword가 unique하면 된다.
- Prefix/instantaneous code : Codeword의 prefix가 다른 codeword가 아니다. (모든 codeword가 구별되기 때문에, 미래의 bit를 확인안해도 된다.)

2. Kraft Inequality
D의 알파벳 크기를 가지는 Prefix code라면, 다음의 부등식을 만족한다.
∑D−li≤1
Converse는 Kraft inequality를 만족하면 해당 l(x)로 prefix code를 만들 수 있음을 의미하게 된다.
*증명은 교과서를 보자
Kraft inequality는 ∞에도 성립한다.
∞∑i=1D−li≤1
간단하게 증명하자면 다음 그림처럼 할당할 수 있기 때문이다.

그래서 정리하자면 다음과 같다.
- Kraft inequality 만족하면, prefix code가 존재한다.
- Prefix code라면 Kraft inequality를 만족한다.
- Uniquely decodable code는 prefix code보다 codeward length가 길거나 같다.
3. Optimal Code
Optimal이 되려면, 길이가 짧으면 장땡이다.
그래서 optimal code를 찾기 위한 식은 다음과 같다.
minimizeL(C)=∑pili
subjectto∑D−li≤1
그러나 위 문제는 li이가 integer이기 때문에 convex optimization을 사용할 수 없다. 그래서 라그랑주 곱셈이랑 KKT로 잘 해결한다. 그래서 다음의 결과를 얻는다. (Shannon code가 된다)
pi=D−li
l∗i=−logDpi
L∗=∑pil∗i=HD(X)
이래서 아까 앞에서 entropy가 lower bound라고 언급했었다. 정리하면 다음과 같다.
L≥HD(X)
with equality iff pi=D−li
Length의 bound를 구해보자. l∗i=−logDpi였다. li는 integer임으로 ceiling을 통해 구하게 되고 Kraft inequality를 만족하는지 확인해보면 만족한다.

ceiling을 이용하기 때문에, 모든 li가 optimal일 때 범위는 다음처럼 제한된다.
HD(X)≤L∗≤HD(X)+1
*shannon code는 optimal이군
4. Compression with Wrong Codes
- source distribution : p(x)
- assigned codeword length : l(x)=ceiling(−logq(x))
H(p)+D(p||q)≤Epl(X)<H(p)+D(p||q)+1
q와 p가 다를수록 D(p||q)가 커진다. 이는 곧 code length가 길어짐을 의미하게 된다.
- px={0.5,0.25,0.125,0.125}
- H(X)=1.75
- qx={0.25,0.25,0.25,0.25}
D(p||q)는 0.25가 되어 codeword length = H(x) + D(p||q) = 2 bits가 된다.
5. Huffman Code : Optimal code construction
- Decreasing order로 확률 줄세우기
- D-ary면 D개만큼 알파벳 할당하기
- D개 합치기
- 반복

Average length를 구해보면, 2.3 bits가 나온다.
Ter-nary case에 대해서는 다음과 같다. 3개의 least prob.을 합치는 식으로 진행한다.

마찬가지로 average length를 구해보면, 1.5 ternary digits이다.
두 케이스를 구분하는 방법은 DE[l(x)]로 진행한다.
- Bi-nary = 22.3 = 4.92
- Ter-nary = 31.5 = 5.20
근데 하다보면 끝에서 D개가 안남을 수 있다. 이 경우에는 Dummy를 추가해서 구한다.

1+(D−1)k로 시작 size를 맞추면 된다. 위 예제는 D=3이므로 k=3을 가정해 7로 시작 size를 맞추었다.
Suboptimal way; Fano's construction
이외에도 suboptimal인 Fano의 코드 생성방법이 있다. Prob.을 줄세워서 이등분 할건데, 최대한 양쪽이 비슷한 확률을 가지도록 나누는 것이다. 그래서 하나씩 0과 1을 할당하며 이 방법을 계속 반복한다.

이 방법은 L(C)≤H(X)+2가 된다.
Optimality of Huffman code
1. Shannon code(sub-optimal)와의 비교
- let px = {1/3, 1/3, 1/4, 1/12}
- Then Huffman code length = (2,2,2,2) or (1,2,3,3)
- Then Shannon code = (2,2,2,4)
3번째 친구는 Shannon이 더 좋지만, average length 측면에서는 Huffman(2)이 Shannon(2.17) 보다 좋음
Binary Huffman code는 optimal이다. 하지만 많은 다른 optimal code가 있다.
2. Optimality 조건
- pi>pj면 li≤lj이다.
- Two longest codeword는 같은 길이임
- Two longest codeword는 마지막 bit만 다름
잘 생각해보면 저래야 optimal을 달성하며 2번 조건은 사실 의미가 없고 3번의 경우 무조건 만족해야지만 optimal인건 아니다.
어쨋든 Huffman code의 경우 해당 조건을 모두 만족해서 optimal이다.
6. Shannon-Fano-Elias codes
누적 확률을 이용해 codeword를 만드는 방법이다.
F(x)=∑a≤xp(a)
간단한 계산을 위해, 수정된 누적합을 사용한다.
F(X)=∑p(a)+12p(x)
F(X)는 real number이기 때문에, code로 사용하기 어려움이 있다. 그래서 largest less than F(X) 값으로 사용한다. Prefix free property도 가능하다.

Example.

Binary로 구하는 과정은 다음과 같다고 한다. (챗지피티쓰)
- 0.125를 2진수로 변환합니다. 0.125는 2진수로 0.001입니다.
- 0.125 *2 = 0.25 (0, 소수점 이하가 0.25 남음)
- 0.25 × 2 = 0.5 (0, 소수점 이하가 0.5 남음)
- 0.5 × 2 = 1.0 (1, 소수점 이하가 0 남음)
- 결과: 0.125 (10진수) = 0.001 (2진수)
SFE로 만든 code의 경우, average L(C)는 2.75 bits이다. Huffman이 1.75 bits였으니 Suboptimal임을 알 수 있다. SFE는 sequence에 적용할 수 있어 Arithmetic coding에 자주 사용된다. 특히 Binary 데이터에 자주 사용된다.
7. Competitiveness of Shannon codes
가장 쉬운 방법은 codeword의 길이를 비교하는 것이다. a에 대해서 codeword의 길이가 짧으면 +1, 길면 -1 점수를 부과하는 방식으로 비교할 수 있다.
Shannon code가 질 확률은 다음과 같다.

지기 매우 어렵다는 것을 의미한다.
Specific case에 대해서는 Shannon code가 optimal임을 보일 수도 있다. 가령 Prob.이 지수승으로 나타나는 dyadic prob. mass function을 distribution으로 가지는 경우이다. (p(x)=2−k) 이 경우에 대해서 Shannon code는 l(x)=l′(x) for all x가 아닌 이상 항상 더 좋다.
'Study > Coding and Information Theory' 카테고리의 다른 글
[08] Linear Codes (2) | 2024.06.11 |
---|---|
[07] Channel Capacity (1) | 2024.06.09 |
SUMMARY (1) | 2024.04.10 |
[05] Entropy Rates (1) | 2024.04.10 |
[04] AEP, Asymptotic Equipartition Property (0) | 2024.04.10 |