Remove ads
forma kodowania entropijnego używana w kompresji bezstratnej Z Wikipedii, wolnej encyklopedii
Kodowanie arytmetyczne – 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. Od roku 2014 było zastępowane kodowaniem Asymmetric Numeral Systems, które pozwala na szybsze implementacje przy podobnym stopniu kompresji.
Ideą tego kodu jest przedstawienie ciągu wiadomości jako podprzedziału przedziału jednostkowego 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 gdzie jest entropią źródła, lecz co najmniej równa samej entropii.
Dany jest zbiór symboli oraz stowarzyszony z nim zbiór prawdopodobieństw Jeden z symboli jest wyróżniony – jego wystąpienie oznacza koniec komunikatu, co zapobiega wystąpieniu niejednoznaczności; ewentualnie zamiast wprowadzenia dodatkowego symbolu można przesyłać długość kodowanego ciągu.
Na początku dany jest przedział który dzielony jest na podprzedziały o szerokościach równych kolejnym prawdopodobieństwom czyli otrzymywany jest ciąg podprzedziałów Kolejnym podprzedziałom (ozn. ) odpowiadają symbole ze zbioru
Algorytm kodowania:
Na rysunku pokazano, jak zmienia się aktualny przedział w trzech pierwszych krokach kodowania. Kodowane są trzy symbole z czteroelementowego zbioru o prawdopodobieństwach w kolejności: pierwszy, trzeci, czwarty.
Niech ( – koniec komunikatu), prawdopodobieństwa
Zakodowany zostanie ciąg
Dekodowanie przebiega prawie tak samo. Różnica polega na tym, że przy kodowaniu kolejne litery jednoznacznie określały 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:
Na rysunku poniżej pokazano pierwsze trzy kroki dekodowania liczby 0,538 (zaznaczonej kropką na osi liczbowej); prawdopodobieństwa symboli: W pierwszej iteracji – liczba 0,538 znajduje się w pierwszym przedziale, a zatem wypisany zostanie pierwszy symbol, a Teraz 0,538 znajduje się w przedziale 3., wypisany zostanie symbol 3., a itd.
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.