가변 길이 코드

Variable-length code

부호화 이론에서 가변 길이 코드는 소스 기호를 가변 비트 수에 매핑하는 코드입니다.

가변 길이 코드를 사용하면 제로 에러(무손실 데이터 압축)로 소스를 압축 및 압축 해제할 수 있지만 기호별로 다시 읽을 수 있습니다.올바른 코딩 전략을 사용하면 독립적이고 동일하게 분포된 소스를 엔트로피에 거의 임의로 압축할 수 있습니다.이는 데이터 압축이 대규모 데이터 블록에서만 가능하며 총 가능성의 대수를 초과하는 압축은 유한한(아마도 임의로 작을 수 있음) 고장 확률을 갖는 고정 길이 부호화 방법과 대조됩니다.

잘 알려진 가변장 부호화 전략의 예로는 Huffman 부호화, Lempel-Ziv 부호화, 산술 부호화 및 컨텍스트 적응형 가변장 부호화 등이 있습니다.

코드와 그 확장자

코드의 확장은 유한 길이의 소스 시퀀스를 유한 길이의 비트 문자열에 매핑하는 것으로, 소스 시퀀스의 각 심볼에 대해 원래 코드에 의해 생성된 대응하는 코드 워드를 연결함으로써 얻을 수 있습니다.

형식 언어 이론의 용어를 사용하여, 정확한 수학적 정의는 다음과 같습니다. S T T 각각 source 및 target 알파벳이라고 하는 2개의 유한 집합으로 합니다. C { C :S\to T^{*}}은 완전히 function[1]를 각각의 상징에서 S{S\displaystyle}에 시퀀스의 기호에 T{T\displaystyle}, 신전의 C{C\displaystyle}에 불완전 변태의 S({\displaystyle S^{*}}에 T∗{\displaystyle T^{*}}, 자연스럽게 매핑 됩니다 각 시퀀스의 소스 symb.ols일련의 대상 기호로 변환되며, 이를 확장이라고 합니다.

가변 길이 코드 클래스

가변 길이 코드는 비싱글 코드, 고유하게 디코딩 가능한 코드 및 프리픽스 코드로서 범용성이 감소하는 순서로 엄밀하게 네스트할 수 있습니다.프리픽스 코드는 항상 일의로 복호화할 수 있으며, 이는 항상 비싱글 코드입니다.

비싱글 코드

각 소스 심볼이 비어 있지 않은 다른 비트 문자열에 매핑되는 경우, 즉 소스 심볼에서 비트 문자열로의 매핑이 주입되는 경우 코드는 비싱글러입니다.

  • 를 들어 매핑 { 0 , 0 , 1 { M_} = \ { , a \ 0 , \ 0 , \ 1, \ } 은 non-lossisting 같은 비트스트링 "0" 에 매핑됩니다.이러한 단수 부호화는 정보의 손실이 허용 가능한 경우(예를 들어 손실 부호화가 소스 양자화와 동등해지는 오디오 또는 비디오 압축에 사용되는 경우)에도 여전히 유용할 수 있습니다.
  • , { 1, b c } 0}({a1, b c\ mapsto 100fsto, map 010,d)(항상 필수)비싱글 코드가 소스보다 콤팩트할 필요는 없습니다(많은 어플리케이션에서는 부호화 오류나 전송 오류를 검출하거나 회복하거나 보안 어플리케이션에서 검출할 수 없는 조작으로부터 소스를 보호하는 방법 등, 큰 코드가 도움이 됩니다.

고유 복호화 코드

코드의 내선번호가 「non-singlear」인 경우는, 코드를 일의로 복호화할 수 있습니다.특정 코드가 고유하게 복호화 가능한지 여부는 Sardinas-Patterson 알고리즘을 사용하여 판단할 수 있습니다.

  • 3 { , , c 011 { } = \ { , a \ , \ 01c \ , \ } dec dec dec dec dec dec dec dec dec dec 맵에서 더 긴 유효한 코드를 다시 작성하지만 새 코드를 명확하게 시작합니다).
  • 이전 [1]섹션의 코드 다시 검토합니다.문자열 011101110011은 코드워드 01110~1110~011의 시퀀스로 해석할 수 있지만 코드워드 011~1~011~10011의 시퀀스로 해석할 수도 있기 때문에 이 코드는 일의로 복호화할 수 없습니다.따라서 이 부호화 문자열의 2가지 가능디코딩은 cdb와 babe에 의해 제공됩니다.단, 이러한 코드는 가능한 모든 소스 기호 세트가 완전히 알려져 유한한 경우 또는 이 확장의 소스 요소가 허용 가능한지 여부를 결정하는 제한(예: 정식 구문)이 있는 경우 유용합니다.이러한 제한에 의해 동일한 심볼에 매핑된 가능한 소스 심볼 중 어떤 것이 이러한 제한 하에서 유효한지를 체크함으로써 원래 메시지를 디코딩할 수 있습니다.

프리픽스 코드

매핑 내의 타깃비트 문자열이 같은 매핑 내의 다른 소스 심볼의 타깃비트 문자열의 프리픽스일 경우 코드는 프리픽스코드입니다즉, 전체 코드워드를 수신한 후 즉시 기호를 디코딩할 수 있습니다.이 개념에서 일반적으로 사용되는 다른 이름으로는 프리픽스 프리 코드, 순간 코드 또는 컨텍스트 프리 코드가 있습니다.

  • 전항의 프리픽스코드가 아닙니다.비트 문자열 "0"을 읽어본 결과, "a" 소스 심볼을 인코딩하는지, "b" 또는 "c" 심볼 인코딩의 프리픽스인지 알 수 없기 때문입니다.
  • 프리픽스 코드의 예를 다음에 나타냅니다.
기호. 코드워드
a 0
b 10
c 110
d 111
부호화 및 복호화의 예:
aabacdab → 0010011010 → 0 10 0 110 111 0 10 → aabacdab

프리픽스 코드의 특수한 경우는 블록코드입니다여기서는 모든 암호어의 길이가 같아야 합니다.후자는 소스 코딩의 컨텍스트에서는 그다지 유용하지 않지만 채널 코딩의 컨텍스트에서는 오류 수정 코드로서 기능하는 경우가 많습니다.

프리픽스 코드의 또 다른 특수한 경우는 가변 길이 수량 코드입니다.이 코드는 임의의 큰 정수를 일련의 옥텟으로 부호화합니다.즉, 각 코드 워드는 8비트의 배수입니다.

이점

가변 길이 코드의 장점은 가능성이 낮은 소스 심볼은 더 긴 코드워드를 할당할 수 있고 가능한 소스 심볼은 더 짧은 코드워드를 할당할 수 있기 때문에 예상되는 코드워드 길이가 낮다는 입니다.위의 예에서 (a, b, c, d)의 확률이( , 4, 8 , ) { \( , {\ , {\frac {8}} , {\ { \right )일 경우, {\frac {\frac {8}} {\frac {8}}}, {\frac {\}}}, {\ {\}}}}}}}}, {\rac {\}}}}}}\}

× +2 × + × + × 8 ({ 1 { { 1 { times { { } { + 3 \ times { { 8 } = {

이 소스의 엔트로피는 심볼당 1.7500비트이므로 이 코드는 소스를 최대한 압축하여 오류 없이 복구할 수 있도록 한다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ a b 이 코드는, Berstel등의 예에 근거하고 있습니다.(2009년), 예 2.3.1, 페이지 63.

추가 정보

  • Berstel, Jean; Perrin, Dominique; Reutenauer, Christophe (2010). Codes and automata. Encyclopedia of Mathematics and its Applications. Vol. 129. Cambridge: Cambridge University Press. ISBN 978-0-521-88831-8. Zbl 1187.94001. 온라인으로 입수 가능한 초안