|
산술 부호화(算術符號化, Arithmetic coding)는 무손실 압축에 사용되는 엔트로피 부호화 알고리즘 가운데 하나이다. 다른 엔트로피 부호화 알고리즘이 각각의 기호를 1:1로 부호로 대체하는 반면에, 산술 부호화는 전체 메시지를 하나의 실수 n으로 대체한다. (0.0 ≤ n < 1.0) 산술 부호화는 주어진 기호와 확률분포에 대해 최적에 가까운 압축률을 보일 수 있다.
동작 원리메시지 모형산술 부호화를 실행하기 위해서는 먼저 데이터의 모형을 결정해야 한다. 모형이란 메시지의 기호들이 어떤 패턴을 갖고 있을 것인지를 예측하는 것으로, 이 모델이 실제 메시지를 더 정확하게 예측할수록 압축률은 더 높아진다. 예를 들어 다음과 같이 메시지에 출현하는 기호들의 고정된 통계적 모형을 가정할 수 있다 :
위와 같은 간단한 네 개의 기호 집합 외에도 더 복잡한 모형 또한 얼마든지 다룰 수 있다. 예를 들어 고차 모형은 이전까지 나온 기호들의 역사에 따라 다음 기호가 나타날 확률을 달리 계산할 수도 있다. 만약 영어 텍스트를 압축하려고 한다면 "Q"나 "q" 기호 다음에는 "u"가 나타날 확률이 훨씬 높을 것이라고 예측할 수 있을 것이다. 혹은 적응적인 모형을 생각할 수도 있다. 이 경우에는 부호화 알고리즘이 기호를 하나씩 압축할 때마다 지금까지 나온 기호의 분포에 따라 모델을 조금씩 바꿔가면서 압축한다. 부호화 알고리즘이 어떤 모형을 취하든 복호화 알고리즘이 동일한 모형을 취한다면 메시지를 원래 그대로 복원할 수 있다. 부호화 단계각각의 부호화 단계는 다음과 같은 세 가지 정보에 따라 실행된다.
먼저 현재의 구간을 다음에 올 수 있는 기호들에 해당하는 더 작은 구간으로 나눈다. 이때 각각의 기호에 해당하는 구간들의 크기의 비율은 기호가 나타날 확률에 비례해야 한다. 그리고 이 구간들 가운데 메시지에 실제로 나타나는 기호에 해당하는 구간을 골라 다시 이 구간으로 다음 단계를 진행한다. 위의 네 개의 기호를 사용하는 모형을 예로 들어 [0-1)의 구간을 나누어 보자. (이 예제에서는 이해를 돕기 위해 십진법을 사용하지만, 실제 구현에서는 효율을 위해 이진법을 사용한다.)
만약 메시지가 "가다(메시지 끝)"이었다면 부호화는 다음과 같이 진행될 것이다. 첫번째 기호가 "가"이므로 구간으로 [0, 0.6)을 선택한다. 새로운 구간 [0, 0.6)은 다시 부호화를 위해 다음과 같이 더 작은 구간으로 나뉜다.
다음 기호는 "다"이므로 이 중에 [0.48, 0.54) 구간을 선택한다. 다시 이 구간을 더 작게 나누면
"메시지 끝"에 해당하는 구간은 [0.534, 0.54)이고 실수 0.537이 이 구간 안에 포함되므로 전체 메시지는 하나의 실수 .537로 부호화된다. 메시지 복호화이렇게 부호화된 실수와 메시지 모형을 함께 전송하면 복호화 알고리즘은 이 프로세스를 동일하게 진행하여 메시지를 복원한다. 위의 메시지를 다시 예로 들어 보자.
압축 효율위 예제에서 같은 메시지가 .534, .535, .536, .537, .538, .539의 어떤 값으로도 부호화될 수 있음을 알 수 있다. 즉 이진수가 아니라 십진수로 부호화하여 약간의 비효율이 포함되었음을 암시한다. 실제로 세 자리 십진수의 정보량은 약 9.966비트이다. 만약에 이 정보를 이진 실수로 부호화했다면 8비트의 실수 .10001010(십진수 .5390625와 같은 값)으로 부호화되었을 것이고 이것은 예제 메시지의 엔트로피인 7.381비트보다 조금 더 많은 정도이다. (이때 부호화된 이진수에서 마지막 0이 빠지면 정확도가 1비트 줄어들어 예제 메시지를 정확히 복호화할 수 없다.) |
This article is from Wikipedia. All text is available under the terms of the GNU Free Documentation License.
Mercedes Car
This site monitored by SitePinger.net