Kodowanie arytmetyczne - Google

Kodowanie arytmetyczne

Z Wikipedii

Skocz do: nawigacji, szukaj

Kodowanie arytmetyczne to metoda kodowania źródłowego dyskretnych źródeł sygnałów, stosowana jako jeden z systemów w bezstratnej kompresji danych. Została wynaleziona przez Petera Eliasa około 1960 roku.

Ideą tego kodu jest przedstawienie ciągu wiadomości jako podprzedziału przedziału jednostkowego [0,1) wyznaczonego rekursywnie na podstawie prawdopodobieństw wystąpienia tychże wiadomości generowanych przez źródło. Ciąg kodowy reprezentujący kodowane wiadomości jest binarnym zapisem wartości z wyznaczonego w ten sposób przedziału.

Można udowodnić, że przy wyborze odpowiednio długiego ciągu wiadomości do zakodowania, średnia liczba symboli na wiadomość jest mniejsza od H(X) + 2, gdzie H(X) jest entropią źródła, lecz większa bądź co najwyżej równa samej entropii.

Spis treści

[edytuj] Algorytm kodowania

Dany jest zbiór symboli S = \{x_1, x_2, \ldots\} oraz stowarzyszony z nim zbiór prawdopodobieństw p = \{p_1, p_2, \ldots\}. Jeden z symboli jest wyróżniony - jego wystąpienie oznacza koniec komunikatu, zapobiegając wystąpieniu niejednoznaczności; ewentualnie zamiast wprowadzenia dodatkowego symbolu można przesyłać długość kodowanego ciągu.

Na początku dany jest przedział P = [0,1), który dzielony jest na podprzedziały o szerokościach równych kolejnym prawdopodobieństwom pi, czyli otrzymywany jest ciąg podprzedziałów [0, p_1), [p_1, p_1 + p_2), [p_1 + p_2, p_1 + p_2 + p_3), [p_1 + p_2 + p_3, p_1 + p_2 + p_3 + p_4), \ldots. Kolejnym podprzedziałom (ozn. Ri) odpowiadają symbole ze zbioru S.

Algorytm kodowania:

  • Dla kolejnych symboli symbol c.
    • OkreÅ›l, który podprzedziaÅ‚ bieżącego przedziaÅ‚u P odpowiada literze c - wynikiem jest Ri.
    • Weź nowy przedziaÅ‚ P: = Ri - nastÄ™puje zawężenie przedziaÅ‚u
    • Podziel ten przedziaÅ‚ P na podprzedziaÅ‚y w sposób analogiczny jak to miaÅ‚o miejsce na samym poczÄ…tku (chodzi o zachowanie proporcji szerokoÅ›ci podprzedziałów).
  • Zwróć liczbÄ™ jednoznacznie wskazujÄ…cÄ… przedziaÅ‚ P (najczęściej dolne ograniczenie, albo Å›rednia dolnego i górnego ograniczenia).

[edytuj] Przykład 1.

Na rysunku pokazano, jak zmienia się aktualny przedział P w trzech pierwszych krokach kodowania. Kodowane są cztery symbole o prawdopodobieństwach p = {0.6,0.2,0.1,0.1} w kolejności: pierwszy, trzeci, czwarty.

[edytuj] Przykład 2.

Niech S = \{a, b, c, \#\} (\# - koniec komunikatu), prawdopodobieństwa p = {0.45,0.3,0.2,0.05}.

Zakodowany zostanie ciÄ…g caba\#.

  • PoczÄ…tkowo przedziaÅ‚ P = [0,1), jest on dzielony na podprzedziaÅ‚y [0,0.45),[0.45,0.75),[0.75,0.95),[0.95,1).
  • Pierwszym kodowany symbolem jest c, któremu odpowiada 3. podprzedziaÅ‚, zatem P: = R3 = [0.75,0.95). Nowy przedziaÅ‚ znów jest dzielony: [0.75,0.84),[0.84,0.9),[0.9,0.94),[0.94,0.95).
  • Kolejnym kodowanym symbolem jest a, któremu odpowiada 1. podprzedziaÅ‚, zatem P: = R1 = [0.75,0.84). Nowy przedziaÅ‚ znów jest dzielony: [0.75,0.7905),[0.7905,0.8175),[0.8175,0.8355),[0.8355,0.84).
  • Kolejnym kodowanym symbolem jest b, któremu odpowiada 2. podprzedziaÅ‚, zatem P: = R2 = [0.7905,0.8175). Nowy przedziaÅ‚ znów jest dzielony: [0.7905,0.80265),[0.80265,0.81075),[0.81075,0.81615),[0.81615,0.8175).
  • Kolejnym kodowanym symbolem jest (ponownie) a, któremu odpowiada 1. podprzedziaÅ‚, zatem P: = R1 = [0.7905,0.80265). Nowy przedziaÅ‚ znów jest dzielony: [0.7905,0.795968),[0.795968,0.799612),[0.799612,0.802042),[0.802042,0.80265).
  • Kolejnym kodowanym symbolem jest \#, koÅ„czÄ…cy kodowanie, któremu odpowiada 4. podprzedziaÅ‚, zatem P: = R4 = [0.802042,0.80265).
  • Na wyjÅ›cie zostaje zapisana liczba identyfikujÄ…ca ten przedziaÅ‚ - może to być, jak wspomniano, jego dolne ograniczenie, czyli 0.802042.

[edytuj] Dekodowanie

Dekodowanie przebiega prawie tak samo. Z tą różnicą, że przy kodowaniu kolejne litery jednoznacznie określała podprzedziały, przy dekodowaniu natomiast wybierany jest ten podprzedział, do którego należy kodująca liczba. Wybranie podprzedziału powoduje wypisanie powiązanego z nim symbolu.

Formalnie algorytm przebiega następująco:

  • x - liczba (kod)
  • P = [0,1)
  • Wykonuj w pÄ™tli:
    • Podziel P na podprzedziaÅ‚y Ri
    • Znajdź podprzedziaÅ‚ Ri do którego należy x.
    • P: = Ri
    • Wypisz i-ty symbol na wyjÅ›cie
    • JeÅ›li i-ty symbol byÅ‚ symbolem koÅ„cowy, zakoÅ„cz pÄ™tlÄ™

[edytuj] Przykład

Na rysunku poniżej pokazano pierwsze trzy kroki dekodowania liczby 0.538 (zaznaczona kropką na osi liczbowej); prawdopodobieństwa symboli: p = {0.6,0.2,0.1,0.1}. W pierwszej iteracji P = [0,1) - liczba 0.538 znajduje się w pierwszym przedziale, a zatem wypisany zostanie pierwszy symbol, a P: = R1 = [0,0.6]. Teraz 0.538 znajduje się w przedziale 3., wypisany zostanie symbol 3. a P = R3 = [0.48,0.54]. Itd.

[edytuj] Praktyczne implementacje

Podstawowy algorytm, dość wolny jednak, generuje kolejne bity rozwinięcia dwójkowego. O wiele lepsza realizacja opiera się w całości na działaniach na liczbach całkowitych.

[edytuj] Bibliografia

Adam Drozdek, Wprowadzenie do kompresji danych, WNT 1999

[edytuj] Zobacz też


ASTD współorganizatorem Międzynarodowego Kongresu Kadry
W dniach 24-27 listopada odbędzie się Międzynarodowy Kongres Kadry - VIII edycja Kongresu Kadry, po raz pierwszy w wydaniu międzynarodowym.
Obrady WTO na razie bez przełomu
W toczących się od poniedziałku rozmowach w Genewie na temat zniesienia barier w światowym handlu w ramach tzw. rundy z Dauhy do soboty nie udało się wypracować porozumienia.
Absurdalne zapisy blokujÄ… unijne dotacje
Bardzo dobry projekt może nie dostać dofinansowania, jeżeli np. przedsiębiorca wypełni wniosek... czarnym długopisem. Takie wątpliwe wymogi wymyślają urzędnicy - czytamy w "Rzeczpospolitej".
KE zamroziła ponad 2 mld euro dla Bułgarii
Komisja Europejska zamroziła znacznie więcej środków dla Bułgarii, niż ogłoszone w środę 825 mln euro z przedakcesjnych funduszy ISPA, PHARE i SAPARD - napisał bułgarski dziennk "Sega".
Betacom: 35 proc. zysku na dywidendÄ™?
Zarząd Betacom zamierza wnioskować do Rady Nadzorczej i WZA o przeznaczenie na wypłatę dywidendy około 35 proc. zysku netto za rok obrotowy 2007/08. W kolejnych latach zarząd planuje rekomendować wypłatę dywidendy na poziomie 25-35 proc. zysku - poinformowała spółka w raporcie rocznym.
Linki: Strona g³ówna