• Nie Znaleziono Wyników

OPTYMALNE I SUBOPTYMALNE MIESZANE KODY HUFFMANA O KRÓTKIM CZASIE KONSTRUKCJI DRZEWA KODOWEGO

N/A
N/A
Protected

Academic year: 2021

Share "OPTYMALNE I SUBOPTYMALNE MIESZANE KODY HUFFMANA O KRÓTKIM CZASIE KONSTRUKCJI DRZEWA KODOWEGO "

Copied!
4
0
0

Pełen tekst

(1)

2004

Poznańskie Warsztaty Telekomunikacyjne Poznań 9 - 10 grudnia 2004 Grzegorz Ulacha

Politechnika Szczecińska Wydział Informatyki ul. Żołnierska 49 71-210 Szczecin gulacha@wi.ps.pl

OPTYMALNE I SUBOPTYMALNE MIESZANE KODY HUFFMANA O KRÓTKIM CZASIE KONSTRUKCJI DRZEWA KODOWEGO

Streszczenie: W referacie zaprezentowano kilka propozycji zmniejszania czasu niezbędnego do konstrukcji drzewa zarówno optymalnego jak i suboptymalnego mieszanego kodu Huffmana. Porównano cechy kodów mieszanego i binarno-ternarnego. Przeprowadzono analizę także pod kątem opóźnień wprowadzanych przez kod mieszany.

1. WSTĘP

Do najefektywniejszych algorytmów entropijnych należą kodowanie arytmetyczne i kodowanie Huffmana [1, 2]. Ten drugi typ jest prosty do implementacji, a podstawowa wersja binarnego kodu Huffmana może być poddawana modyfikacji w celu zwiększenia efek- tywności kompresji. Dotychczasowe podejście np. po- przez tworzenie rozszerzonego kodu Huffmana, wiązało się z bardzo dużym wzrostem zapotrzebowania na pa- mięć niezbędną do prawidłowego działania kodera i dekodera. Przedstawiona w pracach [3-6] propozycja wykorzystania mieszanych kodów Huffmana pozwala na wyeliminowanie tej wady. Dla źródła S o n symbolach optymalnym mieszanym kodem Huffmana jest kod o najkrótszej średniej długości słowa kodowego Lmix, dla którego każdy z węzłów drzewa kodowego nie będący liściem może łą zyć dowolną liczbę 2 c ≤ ri ≤ n potom- ków. Dla uproszczenia kodu jako r przyjmuje się wy- łącznie liczby pierwsze. Do prawidłowego zapisu sym- boli kodowych wymagane jest używanie cyfr r-narnych (r wartościowych), które dla zachowania wysokiej efek- tywności ich zapisu łączy się w bloki po q cyfr i zamie- nia na binarną liczbę B:

=

= 1

0 q i

i ri

a

B (1)

którą można zapisać przy użyciu b(rq) bitów, gdzie:

1 log ) (

log2rqb rq < 2rq + (2) Średnia liczba bitów niezbędna do zapisu jednej cyfry r-narnej wynosi wówczas:

q r r b

bq( )= ( q) (3)

Np. przy q = 5 potrzeba średnio 1.6 bita do zapisu jednej cyfry ternarnej (r = 3). Zdefiniujmy funkcję g(r) jako sumę prawdopodobieństw pwi wszystkich nr węzłów ri-narnych w mieszanym drzewie kodowym:

=

= r

i

n i

pw

r g

1

)

( (4)

Wtedy średnia długość słowa kodu mieszanego wynosi:

(

=

= 1

0

) ( ) (

m i

i q i

mix g r b r

L

)

(5) Gdzie m jest liczbą wszystkich różnych elementów ri-narnych występujących w danym kodzie mieszanym.

Dokładniejsze informacje dotyczące konstrukcji, efek- tywności i doboru parametrów q można znaleźć w pracy [6].

2. BINARNO-TERNARNY KOD HUFFMANA W pracy [4] został przedstawiony sposób obliczania liczby iteracji potrzebnych do wyznaczenia drzewa optymalnego mieszanego kodu Huffmana metodą po- równań. Jest to metoda o wykładniczej złożoności zależ- nej od liczby n symboli źródła, która wymaga porówna- nia średniej długości słowa kodowego Lmix wszystkich drzew mieszanych możliwych do utworzenia z n elementów. Liczbę porównań D można oszacować przy pomocy przybliżonego wzoru:

D≈33⋅(1.794)n8 (6) Praktyczna realizacja algorytmu poszukiwania optymal- nego mieszanego kodu Huffmana nie wymaga tworzenia od początku każdego drzewa, tak aby wyliczyć średnią długość słowa kodowego. Jest to autorska propozycja tzw. szybkiej rekurencji z parametrami globalnymi, www.pwt.et.put.poznan.pl

PWT 2004, Poznań 9 - 10 grudnia 2004

1

(2)

dzięki czemu nie trzeba przekazywać parametrów do wywoływanej rekurencyjnie funkcji. W ten sposób aktu- alnie wyznaczany wynik Lmix częściowo zależy od po- przednio wyliczonych wartości składowych. Program napisany w języku C testowany na komputerze klasy Pentium III 500 MHz wykonywał 406222 porównania na sekundę (pomiar wykonany dla n = 20). Co oznacza, że na podstawie zależności (6) już dla n = 38 symboli potrzebowalibyśmy około godziny, aby znaleźć opty- malne drzewo kodowe. Jest to główna wada tej propozy- cji poszukiwania optymalnych mieszanych kodów Huffmana (w odniesieniu do wydajności obecnie stoso- wanych procesorów przy n ≤ 256). Zmniejszenie liczby porównań jest możliwe dzięki ograniczeniu zbioru war- tości r do dwóch elementów r = {2, 3}. Kod mieszany staje się kodem binarno-ternarnym, co wiąże się z moż- liwością uzyskania nieznacznie mniejszej efektywności, natomiast liczba porównań D zmniejsza się do [7]:

618 1

. 5 1

2 5 1 2

5 1





− −





 +

= n

n n

D (7)

Wartość D dla źródła o n symbolach jest w tym przy- padku n-tym wyrazem ciągu Fibbonaciego. Omawiany powyżej program potrzebował około godziny (na kom- puterze klasy Pentium III 500 MHz), aby wyznaczyć optymalny kod mieszany dla źródła o n = 38 symbolach.

W przypadku kodu binarno-ternarnego jest to niecałe 97 sekund. Ale już dla n = 44 symboli czas zwiększa się do prawie 30 minut. Zatem dla źródeł o dużej liczbie sym- boli nawet algorytm poszukiwania optymalnego kodu binarno-ternarnego okazuje się mało praktyczny. Istnieje jednak wiele zastosowań, w których stosuje się prefik- sowe kody Huffmana o małej liczbie symboli [8]. Jed- nym z przykładów może być kodowanie elementów DC w algorytmie JPEG. W pracy [5] zastosowano kod bi- narno-ternarny uzyskując średni wzrost efektywności kompresji o ponad 1% (względem binarnego kodu Huffmana) dla 12 obrazów testowych. Skrócenie czasu konstrukcji drzewa jest możliwe także dzięki użyciu kodów suboptymalnych.

Przykład 1

Dane jest źródło S składające się z n = 20 symboli o rozkładzie przedstawionym w tabeli 1, w której znaj- dują się także zestawy słów binarnego, binarno- ternarnego i mieszanego kodu Huffmana. Rysunek 1 przedstawia kształt drzewa dla mieszanego kodu Huffmana. Średnia długość słowa kodu binarnego wyno- si L2 = 3.762 co przy entropii tego źródła równej H(S) = 3.72255 bita na symbol daje procentową efek- tywność na poziomie E2 = 98.95126%. Jeżeli użyjemy kodu mieszanego z daną klasą (zestawem parametrów o danych ograniczeniach): r0 = 2, r1 = 3, r2 = 5, r3 = 7, q1 = 41, q2 = 31, q3 = 16, to otrzymamy średnią długość kodu mieszanego równą:

+ + ⋅

+ + +

= (3)

1000

111 335 332 1 1000

1000 333

q

mix b

L

=

⋅ +

+ (7)

1000 ) 111 5 1000 (

112

q

q b

b

) 7 ( 111 . 0 ) 5 ( 112 . 0 ) 3 ( 778 . 1 333 .

0 q q q

mix b b b

L = + ⋅ + ⋅ + ⋅

Dla klasy zdefiniowanej w przykładzie daje to średnią Lmix = L2,3,5,7 = 3.72410, co odpowiada efektywności Emix = 99.95836%. Ograniczenie kodu mieszanego do binarno-ternarnego kodu Huffmana z daną klasą: r0 = 2, r1 = 3, q1 = 41 spowoduje tylko nieznaczny wzrost śred- niej długości kodu mieszanego równej:

) 3 ( 427 . 1 464 .

3 1

,

2 bq

L = + ⋅

Dla zdefiniowanej wyżej klasy daje to średnią L2,3 = 3.72632 co odpowiada efektywności E2,3 = 99.89881%.

3. SUBOPTYMALNY KOD MIESZANY ZE STAŁYM OPÓŹNIENIEM

Zapis słów kodowych możliwy jest na dwa sposoby.

Pierwszym z nich jest kod, w którym najpierw podda- wany jest kompresji cały ciąg danych, a następnie w pliku wynikowym po nagłówku umieszcza się kolejne zakodowane bufory r-narne (ciągi liczb B). Drugi sposób polega na przeplataniu danych binarnych i r-narnych w strumieniu wynikowym, co może być przydatne w przypadku transmisji danych czasu rzeczywistego.

Użycie liczb B wprowadza opóźnienie transmisji, gdyż dekoder już w momencie pojawienia się pierwszego słowa kodu zawierającego choć jedną cyfrę ri-narną (w ogólności f cyfr ri-narnych), powinien mieć dostęp do pierwszej liczby Bi (czyli także do przyszłych q – f cyfr ri-narnych), tak aby móc odczytać (po zdekodowaniu liczby Bi) niezbędnych f cyfr ri-narnych. Ponieważ wraz z każdym słowem kodowym pojawia się średnio g(r) cyfr r-narnych, to w sytuacji gdy q > g(r) koder wpro- wadza opóźnienie, gdyż musi zapisać q cyframi najwol- niej zapełniający się bufor r-narny i dopiero po zakodo- waniu tych cyfr w liczbę B, wysyła ją do odbiorcy (po- dobnie dzieje się z innymi wcześniej zakodowanymi liczbami Bi o większej częstości występowania cyfr ri- narnych). Opóźnienie wyrażone jako stosunek (q – g(r)) cyfr r-narnych do średniej liczby g(r) cyfr r-narnych pojawiających się w każdym kolejnym słowie kodu jest zdefiniowane jako średnia liczba symboli wejściowych, które należy wczytać, aby zapełnić ri-narny bufor liczby Bi:

) 1 ) (

( = −

r g r q

T (8)

Aby uprościć zasadę opisanej powyżej transmisji i zmniejszyć wprowadzane średnie opóźnienie można utworzyć suboptymalny kod dwubuforowy, gdzie oprócz strumienia binarnego będzie tylko jeden dodatkowy bufor r-narny. Przykładem takiego kodu jest optymalny kod binarno-ternarny opisywany w punkcie 2. Jeśli jed- nak cyfry r-narne pojawiają się dość rzadko, czyli gdy wartość g(r) jest bardzo mała, to i tak opóźnienie śred- nie, które jest odwrotnie proporcjonalne do g(r), może być zbyt duże. Aby temu zapobiec, można przedstawić zasadę dla kodu suboptymalnego zgodnie z definicją:

www.pwt.et.put.poznan.pl

PWT 2004, Poznań 9 - 10 grudnia 2004

2

(3)

Tab. 1 Zestaw tabel kodowych dla źródła z przykładu 1

pi Kod mieszany Kod

binarno-ternarny Kod binarny p1 = 0.015 03 23 07 23 12 02 03 02 001100 p2 = 0.015 03 23 17 23 12 02 03 12 001101 p3 = 0.016 03 23 27 23 12 02 13 02 001110 p4 = 0.016 03 23 37 23 12 02 13 12 001111 p5 = 0.016 03 23 47 23 12 02 23 02 101000 p6 = 0.016 03 23 57 23 12 02 33 12 101001 p7 = 0.017 03 23 67 03 02 12 12 02 00000 p8 = 0.022 23 23 05 03 02 12 12 12 00001 p9 = 0.022 23 23 15 23 12 12 02 02 00010 p10 = 0.022 23 23 25 23 12 12 02 12 00011 p11 = 0.023 23 23 35 23 12 12 12 02 00100 p12 = 0.023 23 23 45 23 12 12 12 12 00101 p13 = 0.037 23 03 03 03 02 02 02 10101 p14 = 0.037 23 03 13 03 02 02 12 10110 p15 = 0.037 23 03 23 03 02 12 02 10111

p16 = 0.110 03 03 13 03 010

p17 = 0.111 03 13 13 13 011

p18 = 0.112 23 13 13 23 100

p19 = 0.166 13 02 03 12 110

p20 = 0.167 13 12 23 02 111

p

16

p

17

p

1

p

2

p

3

p

4

p

5

p

6

p

7

p

19

p

20

p

13

p

14

p

15

p

18

p

8

p

9

p

10

p

11

p

12

Rys. 1 Drzewo mieszanego kodu Huffmana dla źródła z przykładu 1 www.pwt.et.put.poznan.pl

PWT 2004, Poznań 9 - 10 grudnia 2004

3

(4)

Definicja 1. Kod mieszany pierwszego rzędu to taki kod, w którym korzeń drzewa kodowego łączy ze sobą r > 2 potomków (korzeń niebinarny), natomiast pozostałe węzły drzewa kodowego posiadają wyłącznie dwóch potomków. Wówczas g(r) = 1.

Kod mieszany pierwszego rzędu charakteryzuje stałe opóźnienie wynoszące q − 1 symboli wejściowych. Wy- nika to z faktu, iż każde słowo kodowe zawiera na po- czątku cyfrę r-narną, a do wysłania liczby B potrzeba właśnie q cyfr r-narnych.

4. KOD MIESZANY O MAŁYM OPÓŹNIENIU Tworząc subobtymalny kod mieszany pierwszego rzędu o r potomkach w korzeniu można także sprawdzić, czy użycie elementu r-narnego dla pozostałych węzłów pozwoli na dalsze skrócenie średniej długości słowa kodowego. Można w tym celu skorzystać z uproszczenia metody kolejnych uściśleń ograniczając test do dwóch możliwości: węzeł binarny lub r-narny (gdzie r zostało wcześniej ustalone dla korzenia). Metoda ta polega na budowie drzewa binarnego kodu Huffmana do momentu, aż pozostanie r elementów (symboli pierwotnego źródła lub węzłów będących korzeniami poddrzew binarnych).

Pozostałe r elementów łączymy węzłem r-narnym (który staje się korzeniem drzewa głównego) i wyznaczamy średnią Lmix takiego drzewa kodowego. Wybieramy tę wartość r, dla której uzyskamy najkrótszą średnią Lmix. W ten sposób uzyskujemy kod mieszany pierwszego rzędu. Następnie wykonujemy rekurencyjnie podobną operację dla każdego z poddrzew, ale mając już tylko dwie możliwości: korzeń poddrzewa binarny lub r-narny, itd. Dla kodów optymalnych (w danej klasie kodów dwubuforowych) procentowy udział niebinarne- go korzenia jest mniejszy niż dla kodów mieszanych pierwszego rzędu, gdyż suma opłacalności (suma zy- sków między zastosowaniem węzłów r-narnych zamiast binarnych) użycia wielu węzłów r-narnych w różnych częściach drzewa kodu mieszanego może sprawiać, że w korzeniu n e tak często będzie występowało więcej niż dwóch potomków. i

Taki dwubuforowy kod o małym opóźnieniu może być stosowany w transmisji danych czasu rzeczywistego, gdzie dane pojawiają się na wejściu kodera na bieżąco.

Jeśli szukamy kompromisu między złożonością kodera, średnim opóźnieniem oraz efektywnością kodu, to po- winniśmy wybrać jeden spośród tych kodów dwubufo- rowych o r-narnym korzeniu, których efektywność jest wyższa od efektywności binarnego kodu Huffmana.

Poszukiwanie optymalnego kodu dwubuforowego wy- maga wyznaczenia średniej długości słowa kodowego dla D(r) kodów mieszanych z korzeniem r-narnym, których liczbę można obliczyć ze wzoru:

= 

 

 − − ⋅ −

= h

j j

r j r r n

D

0

) 2 ) (

( (9)

gdzie h wynosi:





= − 1 r

r

h n (10)

Dodatkowe węzły r-narne nie tylko zwiększają efektyw- ność kompresji, ale zmniejszają także średnie opóźnienie kodera, które jest nie większe niż q − 1 symboli wej- ściowych. Kod mieszany pierwszego rzędu, posiadają- cy potomne węzły r-narne (o dowolnym r), charaktery- zuje się zmiennym średnim opóźnieniem kodera Tśr = max {T(r1), T(r2),..., T(rk)}. Dla źródła z przykładu 1 otrzymano kod binarno-ternarny, dla którego g(3) = 1.427, czyli Tśr = T(3) = 27.73, oraz kod miesza- ny, dla którego g(3) = 1.778, g(5) = 0.112, g(7) = 0.111, wówczas Tśr = T(7) = 98.10.

5. WNIOSKI

W referacie zaprezentowano własności mieszanego kodu Huffmana, który pozwala dla zdecydowanej więk- szości źródeł uzyskać efektywność wyższą od binarnego kodu Huffmana. Poprawa efektywności nie wiąże się dla kodera i dekodera z dużym wzrostem wymagań pamię- ciowych, co ma miejsce np. dla rozszerzonych kodów Huffmana. Główną wadą propozycji jest wykładnicza zależność czasu potrzebnego do wyznaczenia optymal- nego kodu mieszanego od liczby symboli źródła. W referacie przedstawiono kilka propozycji zmniejszania czasu niezbędnego do budowy drzewa zarówno opty- malnego jak i suboptymalnego mieszanego kodu Huffmana. Jedną z propozycji jest kod binarno-ternarny, którego cechy porównano na przykładzie z optymalnym mieszanym kodem Huffmana. Przeprowadzono analizę także pod kątem opóźnień wprowadzanych przez kod mieszany, pozostawiając użytkownikowi ostateczny dobór metody kodowania, zależny od wymagań systemu, w którym będzie ona wykorzystywana.

SPIS LITERATURY

. K. Sayood Kompresja danych – wprowadzenie,

2. resji danych,

3. siński, G. Ulacha „Huffman codes revis-

4. ko-

5. ości kompresji JPEG

6. ieszanych kodów

7. ang „Almost asymptotically optimal flag

8. itor) Lossless Compression Hand- 1

Wydawnictwo RM, Warszawa 2002 A. Drozdek Wprowadzenie do komp

Wydawnictwa Naukowo-Techniczne, Warszawa 1999

R. Sta

ited”, Proceedings of 24th Symposium of Informa- tion Theory in The Benelux, Veldhoven 2003 G. Ulacha „Analiza konstrukcji optymalnych dów mieszanych”, Materiały VIII Sesji Naukowej Informatyki Wydziału Informatyki Politechniki Szczecińskiej, Szczecin 2003

G. Ulacha „Wzrost efektywn

– algorytm szybkiego dekodera liczb ternarnych”, Materiały VI konferencji Reprogramowalne Ukła- dy Cyfrowe, Szczecin 2003

G. Ulacha „Efektywność m

Huffmana”, Materiały konferencyjne VIII Poznań- skich Warsztatów Telekomunikacyjnych, Poznań 2003

M. W

encoding of the integers”, IEEE Transactions on Information Theory, vol. 34, no. 2, s. 324-326, marzec 1988

K. Sayood (ed

book, Academic Press USA, 2003 www.pwt.et.put.poznan.pl

PWT 2004, Poznań 9 - 10 grudnia 2004

4

Cytaty

Powiązane dokumenty

Domkniętym warkoczem będziemy nazywać taki diagram, który daje się zdeformować do domkniętego warkocza według pierwotnej

Jeśli przyjmiemy, że B jest kodem losowej permutacji, a każda permutacja jest jed- nakowo prawdopodobna (czyli pojawia się z prawdopodobieństwem 1 /n!), to można pokazać,

Dla ustalonej długo´sci tekstu n, ka˙zdy ci ˛ ag jest odwzorowany na przedział rozł ˛ aczny z przedziałami odpowiadaj ˛ acymi innym ci ˛ agom.. Gwarantuje to

Twierdzenie o zakazie klonowania kwantowego.

Niech ka˙zdy kod elementarny schematu Σ b¸edzie nierozk ladalny w iloczyn s l´

Okre´sla to funkcj¸e dekodowania na zbiorze wszystkich s l´ ow 0-1-ynkowych 1.. Pokaza´ c, ˙ze kodowanie macierzowe jest kodowaniem grupowym... 5. Kodowanie wielomianowe jest

Algorytm uczenia polega na wykonywaniu modyfikacji wag dla wszystkich wzorów w zbiorze uczącym, albo do momentu w którym błąd sieci będzie się wystarczająco mały, albo

Zasadniczo chodzi tylko o dodawanie, bo pozostałe działania sprowadzają się do dodawania (odejmowanie to dodawanie liczb różnych znaków np.. W przypadku liczb rzeczywistych