섀넌-파노 부호화

Shannon–Fano coding

데이터 압축 분야에서, Claude Shannon과 Robert Fano의 이름을 딴 Shannon-Fano 부호화는 기호 집합과 그 확률(추정 또는 측정)을 기반으로 프리픽스 코드를 구성하는 두 가지 다른 관련 기술에 주어진 이름이다.

  • Shannon 메서드는 소스 i{\i}에 코드워드 - 2 i { }=\ -가 주어지는 접두사 코드를 선택합니다. 코드워드를 선택하는 일반적인 방법 중 하나는 누적 확률의 이진수 확장을 사용합니다.이 방법은 섀넌의 정보 이론 분야를 소개하는 논문인 "소통의 수학적 이론"(1948)에서 제안되었다.
  • Fano의 방법은 소스 기호를 가능한 1/2에 가까운 확률로 두 집합("0"과 "1")으로 나눕니다.그런 다음 각 집합이 하나의 기호만 포함할 때까지 집합 자체가 두 개로 분할됩니다.이 기호의 암호어는 "0"과 "1"의 문자열로, 분할의 절반에 해당하는 부분을 기록합니다.이 방법은 Fano(1949년)의 최신 기술 보고서에서 제안되었습니다.

Shannon-Fano 코드는 Huffman [1]코딩처럼 가능한 최소 예상 코드워드 길이를 항상 달성하지는 않는다는 점에서 차선책입니다.단, Shannon-Fano 코드는 최적의 코드워드 길이가1비트 이내여야 합니다.Fano의 방법은 보통 Shannon의 방식보다 짧은 예상 길이의 인코딩을 생성합니다.그러나 섀넌의 방법은 이론적으로 분석하기가 더 쉽다.

샤논-파노 부호화는 산술 부호화의 선구자인 샤논-파노-엘리아스 부호화(일명 엘리아스 부호화)와 혼동해서는 안 된다.

명명

같은 이름으로 언급되는 두 가지 다른 코드의 혼란에 대해 Krajchi 등은[2] 다음과 같이 기술한다.

1948년 경에, 둘 다 클로드 E.섀넌(1948)과 로버트 M.Fano(1949)는 독립적으로 이산 메모리리스 소스의 효율적인 설명을 위해 두 개의 다른 소스 코딩 알고리즘을 제안했다.안타깝게도 서로 다르지만 두 방식 모두 Shannon-Fano 코딩이라는 동일한 이름으로 알려지게 되었습니다.

이 혼란에는 몇 가지 이유가 있습니다.우선, 그의 코딩 방식에 대한 논의에서, Shannon은 Fano의 계획을 언급하며 "실질적으로 같다"고 말한다(Shannon, 1948, 페이지 17).다른 예로, Shannon과 Fano의 부호화 방식은 둘 다 효율적이라는 점에서 유사하지만 유사한 성능을 가진 차선의 프리픽스 프리 부호화 방식입니다.

Shannon의(1948) 방법은 사전 정의된 단어의 길이를 사용하여 Cover와 [3]Thomas, Goldie와 Pinch,[4] Jones와 Jones,[5][6] Han과 Kobayashi에 의해 Shannon-Fano 코딩이라고 불립니다.Yeung에 [7]의해 Shannon coding이라고 불립니다.

확률의 이항 나눗셈을 사용하는 Fano의 방법(1949)은[8] 살로몬과 [9]굽타에 의해 Shannon-Fano 부호화라고 불린다.Krajchi 등에 [2]의해 Fano coding이라고 불린다.

Shannon 코드: 사전 정의된 단어 길이

섀넌 알고리즘

Shannon의 메서드는 모든 코드워드의 길이를 결정하는 것으로 시작하여 해당 단어의 길이를 가진 접두사 코드를 선택합니다.

, n{\ 경우 원하는 코드워드 길이는 2 i \ \ _ { _ i 입니다. {2}x x 입니다.

코드워드 길이가 결정되면 코드워드 자체를 선택해야 합니다.하나의 방법은 가장 가능성이 높은 기호부터 가장 가능성이 낮은 기호까지 순서대로 코드워드를 선택하는 것이며, 각 코드워드는 프리픽스 프리 속성을 유지하는 올바른 길이의 사전 편찬상 첫 번째 단어가 될 것입니다.

두 번째 방법은 누적 확률을 이용한다.먼저 확률은 p 2 p n { 의 내림차순으로 기재되어 있습니다.그 후 누적 확률은 다음과 같이 정의됩니다.

c 1 , , 1 + p ({} =, } =+ } 등)입니다.i({i})의 코드워드는 바이너리 확장의 첫 l}) 자리수로 선택됩니다.

다음 예시는 작은 알파벳의 Shannon-Fano 코드 구성을 보여 줍니다.5가지 소스 기호가 있습니다.기호 확률을 추정할 수 있는 다음과 같은 빈도로 총 39개의 기호가 관측되었다고 가정합니다.

기호. A B C D E
세어보세요 15 7 6 6 5
확률 0.385 0.179 0.154 0.154 0.128

이 소스는 H) H)=비트입니다.

Shannon-Fano 코드의 경우 원하는 단어 i - 2 p \ }=\ _을 계산할 필요가 있습니다.

기호. A B C D E
확률 0.385 0.179 0.154 0.154 0.128
1.379 2.480 2.700 2.700 2.963
단어 길이 - 2 { _ 2 3 3 3 3

프리픽스 프리 속성을 유지하는 올바른 길이의 사전 편집 첫 번째 단어를 선택하여 코드 워드를 순서대로 선택할 수 있습니다.확실히 A는 00이라는 암호를 가지고 있다.프리픽스 프리 속성을 유지하기 위해 B의 코드 워드는 00을 시작하지 않을 수 있습니다.따라서 사전 편찬상 가장 먼저 사용 가능한 길이 3의 단어는 010입니다.이렇게 계속하면 다음과 같은 코드가 표시됩니다.

기호. A B C D E
확률 0.385 0.179 0.154 0.154 0.128
단어 길이 - 2 { _ 2 3 3 3 3
코드워드 00 010 011 100 101

또는 누적 확률법을 사용할 수도 있습니다.

기호. A B C D E
확률 0.385 0.179 0.154 0.154 0.128
누적 확률 0.000 0.385 0.564 0.718 0.872
...바이너리 0.00000 0.01100 0.10010 0.10110 0.11011
단어 길이 - 2 { _ 2 3 3 3 3
코드워드 00 011 100 101 110

두 가지 방식의 코드워드는 다르지만 단어의 길이는 동일합니다.A의 경우 2비트, B, C, D, E의 경우 3비트의 길이가 있으며 평균 길이는

엔트로피의 1비트 이내입니다.

예상 단어 길이

섀넌의 방법에서, 단어 길이는 다음을 만족한다.

따라서 예상 단어 길이는 다음을 만족한다.

서 H - 2 H)=-\ _ _{}는 엔트로피이며, 섀넌의 소스 코딩 정리에 따르면 모든 코드는 평균 H)를 가져야 합니다최적의 예상 단어 길이의 비트입니다.

Fano 코드: 바이너리 분할

Fano의 코드 개요

Fano의 방법에서는 기호는 가장 가능성이 높은 것부터 가장 가능성이 낮은 것 순으로 배열된 다음 가능한 한 확률이 동일한 두 집합으로 나뉩니다.그러면 모든 기호에는 코드의 첫 번째 숫자가 할당됩니다. 첫 번째 세트의 기호는 "0"을 수신하고 두 번째 세트의 기호는 "1"을 수신합니다.멤버가 여러 개인 세트가 남아 있는 한 해당 세트에 동일한 프로세스가 반복되어 코드의 연속된 디지트가 결정됩니다.집합이 하나의 기호로 축소된 경우 이는 기호 코드가 완료되었음을 의미하며 다른 기호 코드의 접두사를 형성하지 않습니다.

이 알고리즘은 꽤 효율적인 가변 길이 인코딩을 생성합니다. 파티션에 의해 생성된 두 개의 작은 집합이 실제로 동일한 확률일 경우, 그것들을 구별하는 데 사용되는 1비트의 정보가 가장 효율적으로 사용됩니다.유감스럽게도 Shannon-Fano 코딩이 항상 최적의 프리픽스코드를 생성하는 것은 아닙니다.확률 {0.35, 0.17, 0.16, 0.15}은 Shannon-Fano 코딩에 의해 최적의 코드가 할당되는 예입니다.

Fano 버전의 Shannon-Fano 코딩은 파일 [10]형식의 일부인 압축 방식에 사용됩니다.

샤논-파노 나무

Shannon-Fano 트리는 효과적인 코드 테이블을 정의하도록 설계된 사양에 따라 구축됩니다.실제 알고리즘은 다음과 같습니다.

  1. 주어진 기호 목록에 대해 각 기호의 상대적 발생 빈도를 알 수 있도록 해당 확률 또는 주파수 카운트 목록을 작성합니다.
  2. 빈도에 따라 기호 목록을 정렬합니다. 가장 자주 발생하는 기호는 왼쪽에 있고 가장 자주 발생하는 기호는 오른쪽에 있습니다.
  3. 왼쪽 부분의 총 주파수 카운트가 오른쪽 부분의 총 주파수 카운트에 최대한 근접하도록 목록을 두 부분으로 나눕니다.
  4. 목록의 왼쪽 부분에는 이진 숫자 0이 할당되고 오른쪽 부분에는 숫자 1이 할당됩니다.즉, 첫 번째 부분의 기호 코드는 모두 0으로 시작하고 두 번째 부분의 코드는 모두 1로 시작합니다.
  5. 순서 3과 4를 2개의 반쪽 각각에 재귀적으로 적용하여 그룹을 세분화하고 각 기호가 트리의 대응하는 코드 리프가 될 때까지 코드에 비트를 추가합니다.

섀넌-파노 알고리즘

이전 예제를 계속합니다.

기호. A B C D E
세어보세요 15 7 6 6 5
확률 0.385 0.179 0.154 0.154 0.128

모든 기호는 주파수별로 왼쪽에서 오른쪽으로 정렬됩니다(그림 a 참조).기호 B와 C 사이에 구분선을 넣으면 왼쪽 그룹에 총 22개, 오른쪽 그룹에 총 17개가 됩니다.이렇게 하면 두 그룹 간의 합계 차이가 최소화됩니다.

이 분할에서는 그림 b와 같이 A와 B는 각각 0비트로 시작하는 코드를 가지며, C, D 및 E 코드는 모두 1로 시작합니다.이어서 트리의 왼쪽 절반이 A와 B 사이에 새로운 분할을 얻습니다.그러면 A는 코드 00의 리프, B는 코드 01의 리프입니다.

4개의 분할 절차 후 코드 트리가 생성됩니다.마지막 트리에서 주파수가 가장 높은 세 개의 기호에는 모두 2비트 코드가 할당되어 있으며, 카운트가 낮은 두 개의 기호에는 아래 표와 같이 3비트 코드가 할당되어 있습니다.

기호. A B C D E
확률 0.385 0.179 0.154 0.154 0.128
제1부 0 1
제2분할 0 1 0 1
제3분할 0 1
코드워드 00 01 10 110 111

그 결과 A, B, C의 경우 2비트, D와 E의 경우 3비트당 길이가 되며 평균 길이는

평균 길이가 2.28인 Fano의 방법이 평균 길이가 2.62인 Shannon의 방법을 능가하는 것을 알 수 있습니다.

예상 단어 길이

그것은 Krajči(al[2]은 파노의 메서드의 예상되는 길이 길이 위 EL에 의해 H≤ 경계가 기대했던 것(X)+1− p분{\displaystyle \mathbb{E}L\leq H(X)+1-p_{\text{분}}}, p분)분 나는 p 나는{\displaystyle p_{\text{분}}=\textstyle \min _{나는}p_{나는}}은 최소 공통의 확률 s 나타난다ymbol.

다른 코딩 방법과의 비교

Shannon-Fano 알고리즘이 최적의 코드를 생성하는 것은 보증되지 않습니다.이러한 이유로 Shannon-Fano 코드는 거의 사용되지 않습니다. Huffman 부호화는 계산적으로 매우 간단하며 각 기호가 정수 비트로 구성된 코드로 표현된다는 제약 조건 하에서 항상 가능한 최소 예상 코드 워드 길이를 달성하는 접두사 코드를 생성합니다.이것은 코드가 긴 시퀀스로 엔드 투 엔드로 패킹되기 때문에 대부분의 경우 불필요한 제약입니다.한 번에 코드 그룹을 고려할 경우 기호별 허프만 코딩은기호의 확률이 독립적이고 1/k(\ 1의 검정력인 경우에만 최적이다. 대부분의 상황에서 산술 코딩은 허프만 또는 섀넌보다 전체적인 압축을 더 크게 만들 수 있다.Fano, 이는 기호의 실제 정보 내용에 더 가까운 소수 비트로 인코딩할 수 있기 때문입니다.그러나 산술 부호화는 계산 비용이 더 많이 들고 여러 특허로 커버되기 때문에 [11]Huffman이 Shannon-Fano를 대체하는 방식으로 Huffman을 대체하지 못했다.

허프만 부호화

년 후, 데이비드 A. Huffman(1949)[12]은 주어진 기호 확률에 대해 항상 최적의 트리를 생성하는 다른 알고리즘을 제공했다.Fano의 Shannon-Fano 트리는 뿌리에서 잎으로 분할하여 생성되지만 Huffman 알고리즘은 반대 방향으로 작용하여 잎에서 루트로 병합됩니다.

  1. 각 심볼에 대해 리프 노드를 생성하여 해당 발생 빈도를 우선순위로 사용하여 priority 큐에 추가합니다.
  2. 큐에 노드가 여러 개 있는 경우:
    1. 큐에서 확률 또는 빈도가 가장 낮은 2개의 노드를 삭제합니다.
    2. 이러한 노드에 이미 할당된 모든 코드에 각각 0과 1을 추가합니다.
    3. 이들 2개의 노드를 자녀로서 2개의 노드의 확률 합계와 같은 확률로 새로운 내부 노드를 작성합니다.
    4. 큐에 새 노드를 추가합니다.
  3. 나머지 노드는 루트 노드이며 트리는 완성됩니다.

Huffman 코딩 예제

허프만 알고리즘

위의 Shannon-Fano 예시와 같은 주파수를 사용합니다.viz :

기호. A B C D E
세어보세요 15 7 6 6 5
확률 0.385 0.179 0.154 0.154 0.128

이 경우 D와 E는 주파수가 가장 낮기 때문에 각각0과 1이 할당되어 합계 0.282의 확률로 그룹화된다.현재 가장 낮은 쌍은 B와 C이므로 0과 1이 할당되고 0.333의 확률로 함께 그룹화됩니다.그러면 BC와 DE는 가장 낮은 확률로 남습니다.따라서 0과 1이 코드 앞에 추가되어 결합됩니다.그러면 A와 BCDE만 남고 각각0과 1이 추가되어 결합됩니다.이로써 단일 노드가 생성되고 알고리즘이 완성됩니다.

이번에 다른 문자의 코드 길이는 A는 1비트, 그 외 모든 문자는 3비트입니다.

기호. A B C D E
코드워드 0 100 101 110 111

그 결과 A의 경우 1비트, B, C, D 및 E의 경우 3비트당 길이가 1비트로 되어 평균 길이는

Huffman 코드가 Shannon-Fano 코드의 2.62와 2.28의 길이를 예상한 두 가지 유형의 Shannon-Fano 코드보다 성능이 우수하다는 것을 알 수 있습니다.

메모들

  1. ^ Kaur, Sandeep; Singh, Sukhjeet (May 2016). "Entropy Coding and Different Coding Techniques" (PDF). Journal of Network Communications and Emerging Technologies. 6 (5): 5. Archived from the original (PDF) on 2019-12-03. Retrieved 3 December 2019.
  2. ^ a b c 스타니슬라프 크라이치, 류친푸, 라디슬라프 미케시, 스테판 M.Moser(2015), "Fano coding 성능 분석", 2015 IEEE 국제 정보 이론 심포지엄(ISIT).
  3. ^ 토마스 M.커버와 조이 A.Thomas (2006), Elements of Information Theory (제2판), Wiley-Intercience.제5장에 대한 "이력 주석"
  4. ^ Charles M. Goldie와 Richard G. E. Pinch(1991) 케임브리지 대학 출판부 커뮤니케이션 이론섹션 1.6
  5. ^ 가레스 A.Jones and J. Mary Jones (2012), 정보와 코딩 이론 (Springer).섹션 3.4.
  6. ^ 테선한과 킹고 고바야시(2007년), 정보와 코딩의 수학, 미국 수학회.제3.7.1항
  7. ^ 스프링거 정보이론 제1코스(2002).제3.2.2항
  8. ^ David Salomon(2013), 데이터 압축: 완전 참조서, 스프링거.섹션 2.6.
  9. ^ 프라카시 CGupta (2006), 데이터 통신 및 컴퓨터 네트워크, Phi Publishing.제1.11.5항
  10. ^ "APPNOTE.TXT - .ZIP File Format Specification". PKWARE Inc. 2007-09-28. Retrieved 2008-01-06. The Imploding algorithm is actually a combination of two distinct algorithms. The first algorithm compresses repeated byte sequences using a sliding dictionary. The second algorithm is used to compress the encoding of the sliding dictionary output, using multiple Shannon–Fano trees.
  11. ^ Ze-Nian Li; Mark S. Drew; Jiangchuan Liu (9 April 2014). Fundamentals of Multimedia. Springer Science & Business Media. ISBN 978-3-319-05290-8.
  12. ^ Huffman, D. (1952). "A Method for the Construction of Minimum-Redundancy Codes" (PDF). Proceedings of the IRE. 40 (9): 1098–1101. doi:10.1109/JRPROC.1952.273898.

레퍼런스