KOMPRESJA STRATNA I BEZSTRATNA



Podobne dokumenty
0-0000, , , itd

Kompresja danych i formaty plików graficznych

dr hab. inż. Lidia Jackowska-Strumiłło, prof. PŁ Instytut Informatyki Stosowanej, PŁ

Kompresja Stratna i Bezstratna Przegląd Najważniejszych Formatów Graficznych

Klasyfikacja metod kompresji

Temat: Algorytm kompresji plików metodą Huffmana

Kompresja obrazów i formaty plików graficznych

Klasyfikacja metod kompresji

GRAFIKA RASTROWA. WYKŁAD 2 Oprogramowanie i formaty plików. Jacek Wiślicki Katedra Informatyki Stosowanej

mgr inż. Grzegorz Kraszewski SYSTEMY MULTIMEDIALNE wykład 4, strona 1. GOLOMBA I RICE'A

Wykorzystanie grafiki wektorowej do tworzenia elementów graficznych stron i prezentacji

Kompresja Kodowanie arytmetyczne. Dariusz Sobczuk

Algorytmy kompresji. Kodowanie Huffmana, kodowanie arytmetyczne

Rozszerzenia plików graficznych do publkacji internetowych- Kasia Ząbek kl. 2dT

FORMATY PLIKÓW GRAFICZNYCH

Kodowanie i kompresja Streszczenie Studia dzienne Wykład 9,

Według raportu ISO z 1988 roku algorytm JPEG składa się z następujących kroków: 0.5, = V i, j. /Q i, j

Algorytmy zachłanne. dr inż. Urszula Gałązka

Kompresja bezstratna. Entropia. Kod Huffmana

Założenia i obszar zastosowań. JPEG - algorytm kodowania obrazu. Geneza algorytmu KOMPRESJA OBRAZÓW STATYCZNYCH - ALGORYTM JPEG

Obróbka grafiki cyfrowej

KODY SYMBOLI. Kod Shannona-Fano. Algorytm S-F. Przykład S-F

Kodowanie Huffmana. Platforma programistyczna.net; materiały do laboratorium 2014/15 Marcin Wilczewski

Przetwarzanie i transmisja danych multimedialnych. Wykład 5 Kodowanie słownikowe. Przemysław Sękalski.

Cała prawda o plikach grafiki rastrowej

Kompresja bezstratna

Nierówność Krafta-McMillana, Kodowanie Huffmana

Wykład II. Reprezentacja danych w technice cyfrowej. Studia Podyplomowe INFORMATYKA Podstawy Informatyki

ZESZYTY ETI ZESPOŁU SZKÓŁ W TARNOBRZEGU Nr 1 Seria: Teleinformatyka 2013 KOMPRESJA BEZSTRATNA PLIKÓW ALGORYTM HUFFMANA

Formaty plików graficznych

Podstawowe pojęcia. Teoria informacji

Formaty plików graficznych

Granica kompresji Kodowanie Shannona Kodowanie Huffmana Kodowanie ciągów Kodowanie arytmetyczne. Kody. Marek Śmieja. Teoria informacji 1 / 35

Technologie cyfrowe semestr letni 2018/2019

Formaty plików graficznych

Def. Kod jednoznacznie definiowalny Def. Kod przedrostkowy Def. Kod optymalny. Przykłady kodów. Kody optymalne

Grafika na stronie www

Kodowanie informacji

Kody Tunstalla. Kodowanie arytmetyczne

Elementy grafiki komputerowej

Wykład III: Kompresja danych. Studia Podyplomowe INFORMATYKA Podstawy Informatyki

Joint Photographic Experts Group

Cyfrowe przetwarzanie i kompresja danych. dr inż.. Wojciech Zając

LZ77 LZ78. Kompresja danych. Tomasz Jurdziński. Wykład 5: kodowanie słownikowe

Formaty plików. graficznych, dźwiękowych, wideo

1. Przypisy, indeks i spisy.

Podstawy użytkowania systemu Linux

teoria informacji Entropia, informacja, kodowanie Mariusz Różycki 24 sierpnia 2015

Kodowanie informacji

Algorytmy i struktury danych. Co dziś? Tytułem przypomnienia metoda dziel i zwyciężaj. Wykład VIII Elementarne techniki algorytmiczne

Kwantyzacja wektorowa. Kodowanie różnicowe.

ZESPÓŁ LABORATORIÓW TELEMATYKI TRANSPORTU ZAKŁAD TELEKOMUNIKACJI W TRANSPORCIE WYDZIAŁ TRANSPORTU POLITECHNIKI WARSZAWSKIEJ

GRAFIKA RASTROWA. WYKŁAD 1 Wprowadzenie do grafiki rastrowej. Jacek Wiślicki Katedra Informatyki Stosowanej

Wprowadzenie Algorytm ByteRun ByteRun - przykład Algorytm RLE Przykład działania RLE Algorytm LZW Przykład kompresji LZW

Niech x 1,..., x n będzie ciągiem zdarzeń. ---

Kompresja danych kodowanie Huffmana. Dariusz Sobczuk

Kody Huffmana. Konrad Wypyski. 11 lutego 2006 roku

1 LEKCJA. Definicja grafiki. Główne działy grafiki komputerowej. Programy graficzne: Grafika rastrowa. Grafika wektorowa. Grafika trójwymiarowa

Wygra Polska czy Brazylia, czyli o tym jak zwięźle zapisywać informacje

Definicja. Jeśli. wtedy

dr inż. Piotr Odya dr inż. Piotr Suchomski

Algorytmy kodowania entropijnego

Formaty obrazów rastrowych biblioteki PBM

KOMPRESJA OBRAZÓW STATYCZNYCH - ALGORYTM JPEG

AKD Metody słownikowe

Grafika rastrowa i wektorowa

Algorytmy i struktury danych

Technologie cyfrowe. Artur Kalinowski. Zakład Cząstek i Oddziaływań Fundamentalnych Pasteura 5, pokój 4.15 Artur.Kalinowski@fuw.edu.

Grafika Komputerowa Wykład 1. Wstęp do grafiki komputerowej Obraz rastrowy i wektorowy. mgr inż. Michał Chwesiuk 1/22

Wstęp Statyczne kody Huffmana Dynamiczne kody Huffmana Praktyka. Kodowanie Huffmana. Dawid Duda. 4 marca 2004

Teoria informacji i kodowania Ćwiczenia

Kodowanie i entropia

Kodowanie predykcyjne

Grafika komputerowa dziedzina informatyki zajmująca się wykorzystaniem technik komputerowych do celów wizualizacji artystycznej oraz wizualizacji i

Podstawy kompresji danych

Cechy formatu PNG Budowa bloku danych Bloki standardowe PNG Filtrowanie danych przed kompresją Wyświetlanie progresywne (Adam 7)

1.1. Pozycyjne systemy liczbowe

Kodowanie Shannona-Fano

Księgarnia internetowa Lubię to!» Nasza społeczność

Łyżwy - omówienie zadania

Metody kompresji i przechowywania obrazów

ZADANIE 1. Rozwiązanie:

Przetwarzanie obrazu cyfrowego

Reprezentacja obrazów. dr inż. Izabela Szczęch Politechnika Poznańska Podstawy informatyki

Wybrane metody kompresji obrazów

Python: JPEG. Zadanie. 1. Wczytanie obrazka

Zasady programowania Dokumentacja

mgr inż. Grzegorz Kraszewski SYSTEMY MULTIMEDIALNE wykład 3, strona 1.

1. Pobieranie i instalacja FotoSendera

Przetwarzanie i transmisja danych multimedialnych. Wykład 3 Kodowanie Shannona Fano i Huffmana. Przemysław Sękalski.

Podstawy informatyki. Izabela Szczęch. Politechnika Poznańska

Kompresja danych DKDA (7)

Kompresja obrazów w statycznych - algorytm JPEG

Porównanie rastrowego i wektorowego formatu zapisu obrazu cyfrowego

GRAFIKA. Formaty plików graficznych

Waldemar Izdebski - Wykłady z przedmiotu SIT / Mapa zasadnicza 30

Podstawowe operacje arytmetyczne i logiczne dla liczb binarnych

KODY SYMBOLI. Materiały KODA, A.Przelaskowski. Koncepcja przedziałów nieskończonego alfabetu

Spis treści. Format WAVE Format MP3 Format ACC i inne Konwersja między formatami

Transkrypt:

KOMPRESJA STRATNA I BEZSTRATNA W znaczeniu informatycznym kompresja to zmniejszenie objętości danych przy zachowaniu ładunku informacyjnego, czyli sensu tych danych. Celem kompresji jest zatem możliwie dokładna reprezentacja informacji przy użyciu możliwie małej ilości bitów. Kompresja ma zazwyczaj na celu oszczędność nośnika i/lub łącza sieciowego, którym są przesyłane dane, czyli redukcję kosztów. Proces odwrotny do kompresji nazywamy dekompresją. Dlaczego kompresja jest możliwa? duża część danych cechuje się znaczną redundancją (nadmiarowością), tzn. pewne informacje powtarzają się z różną częstością dane są prezentowane w rozmaity sposób (np. grafika może być rastrowa lub wektorowa) człowiek ma ograniczone zdolności percepcyjne mózg można do pewnego stopnia oszukać. Kompresji można poddawać dane (zbiory informacji) różnego rodzaju, m.in.: tekst dźwięk (mowa, muzyka) obraz ruchomy i nieruchomy pliki wykonywalne. Algorytmem kompresji nazywamy schemat postępowania przy zmniejszaniu objętości pliku; najczęściej zależy on od charakteru kompresowanych danych. Algorytmy kompresji można podzielić ze względu na różne kryteria, np. stopień zmiany ładunku informacyjnego : kompresja bezstratna kompresja stratna Kompresja bezstratna Algorytmy kompresji bezstratnej umożliwiają takie przechowanie danych, by w procesie dekompresji uzyskać dane w postaci identycznej z tą, jaką miały przed poddaniem ich kompresji. Dzieje się to jednak zazwyczaj kosztem gorszego współczynnika kompresji. Nadają się do danych charakteryzujących się dużą redundancją (nadmiarowością) informacji. Niektóre obszary zastosowań: tekst, bazy danych, pewne rodzaje obrazów statycznych (np. do zastosowań medycznych). Przykłady algorytmów bezstratnych: Deflate, Huffman, LZW, RLE, BZIP2. Kompresja stratna Przy użyciu algorytmu kompresji stratnej część oryginalnych danych zostaje utracona, chociaż ładunek informacyjny zazwyczaj jest zachowany. Algorytmy kompresji stratnej oferują lepsze 1

współczynniki kompresji niż algorytmy kompresji bezstratnej. Niektóre obszary zastosowań: obraz ruchomy i nieruchomy, muzyka, mowa. Przykłady algorytmów stratnych: DCT, metoda falkowa, JPEG, MPEG, Vorbis, MP3. Współczynnik kompresji (ang. compression ratio) jest definiowany jako stosunek objętości danych skompresowanych (wyjściowych) do objętości danych oryginalnych (wejściowych), czyli jego wartość zawiera się w przedziale od 0 do 1. Stopień kompresji (ang. compression factor) jest odwrotnością współczynnika kompresji i przyjmuje wartości większe od Przypadek szczególny: grafika Coraz większa ilość informacji jest przekazywana w postaci obrazów (statycznych i ruchomych). Zasadnicza część pochodzi od plików graficznych produkowanych przez rozmaite urządzenia do cyfrowej rejestracji obrazu (cyfrowe aparaty fotograficzne, cyfrowe kamery filmowe, skanery, zdjęcia satelitarne, systemy obrazowania medycznego i inne). Rodzaje plików graficznych rastrowe (bitmapy) obraz zapisany jako siatka punktów (pikseli) opisanych przez ich położenie na płaszczyźnie oraz przez bity koloru (np. JPEG, GIF, PNG, TIFF) wektorowe (obiektowe) obraz jest tworzony przez obiekty matematyczne: punkty i krzywe (np. SVG, Flash) metapliki swego rodzaju kontenery ; pliki zawierające w sobie inne pliki i/lub informacje opisujące te pliki (np. WMF, EMF) pliki opisu strony obraz zapisany jest w specyficznym języku programowania (np. PCL, PostScript) KOMPRESJA BEZSTRATNA Bezstratna kompresja jest bardzo łatwa do opisania: Oryginalny obraz może być odtworzony w dowolnym momencie, w dokładnie identycznej formie - po dekompresji każdy piksel posiada dokładnie taką samą wartość jak przed nią. Formaty programów do edycji obrazu - takie jak format *.PSD w Adobe Photoshop - są często wyposażone w bezstratne algorytmy kompresji. Istnieją jednak także inne metody. LZW Tak zwany format TIFF (Tagged Image File Format) stosuje bezstratną metodę 2

kompresji znaną jako metoda Lemple-Zif-Welch (LZW). Jednak, ta wersja, którą mogą zapisywać dobre programy edycyjne, jest w stanie znacząco zmniejszyć tylko rozmiary plików zawierających obrazy o dużych obszarach jednakowego koloru. Program Picmaster jest przykładem programu typu shareware, które oferuje kompresję LZW do formatu TIFF. ZIP Inną bezstratną metodą jest kompresja ZIP, która może być stosowana do dowolnego tekstu, programu i innych plików, a więc także do zdjęć. Zastosowanie programu do kompresji ZIP, takiego jak np. PowerArchiver. Oczywiście zmniejszenie rozmiaru pliku jest znacznie mniejsze, jeśli stosujemy tą metodę do wcześniej skompresowanych plików graficznych. KOMPRESJA STRATNA Metody stratne JPEG Bardzo popularną metodą i jedyną, która jest stosowana praktycznie we wszystkich aparatach cyfrowych do zaoszczędzenia pamięci, jest kompresja JPEG (Joint Photographic Experts Group). Nie da się określić o ile zmniejszany jest rozmiar pliku, ponieważ przy użyciu tej metody sami wybieramy stopień kompresji. JPEG2000 JPEG2000 jest rozwinięciem standardu JPEG, który ma zastąpić swojego poprzednika (wprowadzonego w 1991 roku) i posiada znacznie bardziej zaawansowane algorytmy. GIF Format GIF (Graphics Interchange Format) jest potężnym specjalistą do kompresji grafiki. Wykorzystuje bezstratną metodę LZW, ale zapisuje obrazy w trybie 8-bitowym lub 256 kolorów. PNG Format PNG (Portable Network Graphics) jest alternatywą do formatu GIF w trybie 8- bitowym lub 256-kolorów i formatu JPEG w metodzie 24-bitowej lub 16,7 miliona kolorów. Która metoda i kiedy? Jeszcze przed zrobieniem zdjęcia i ponownym zapisaniem danych na komputerze, powinieneś zdecydować, do czego będą używane. Jeśli masz wątpliwości, nie masz wyjścia i musisz wybrać format pożerający pamięć, żeby z miejsca nie uniemożliwić żadnego zastosowania zdjęć. 3

TIFF Jesteś po bezpiecznej stronie, pod warunkiem, że aparat oferuje takie możliwości. Jest to metoda zapisu bez kompresji, ponieważ zapisuje dane na nośniku dokładnie w taki sposób jak są odczytywane przez aparat. Format TIFF zachowuje wszystkie informacje graficzne podczas zapisywania, co czyni go idealnym rozwiązaniem, gdy chcemy później uzyskać wielkoformatowe odbitki lub plakaty oraz gdy chcesz wykonać powiększenia wybranych fragmentów. Bezstratna kompresja LZW jest dobrym wyborem dla edycji graficznej, a format ZIP dodatkowo zmniejszy rozmiar pliku, gdy chcesz go przeslać pocztą elektroniczną. JPEG Dzięki formatowi JPEG i dobremu programowi do kompresji lub edycji obrazu, masz możliwość kompresji zdjęcia do prawie każdego zastosowania. Zawsze musisz jednak zwracać uwagę do związku pomiędzy rozmiarem pliku i jakością. Jeśli zbyt szybko i za bardzo skompresujesz, bez zapisania oryginału, nieodwracalnie stracisz część danych. GIF Format GIF jest idealny do kompresji grafiki charakteryzującej się obszarami dokładnie określonymi i o stosunkowo jednorodnych kolorach, takich jak rysunki komiksowe. Metoda ta jest dobra dla obrazów półtonowych, gdy potrzebujesz dużej kompresji i chcesz w zdjęcia wkomponować tekst lub animować zdjęcia do wykorzystania w Internecie. Format GIF zazwyczaj ma przewagę nad JPEG, jeśli chodzi o jakość i rozmiar pliku, gdy chodzi o przyciski nawigacyjne stron internetowych lub graficzne loga. PNG PNG, szczególnie w wersji 8-bitowej, może być dobrą alternatywą dla formatu GIF, ponieważ, w pewnych okolicznościach, umożliwia tworzenie mniejszych plików o porównywalnej jakości. Należy jednak zaznaczyć, że będąc nieco egzotycznym formatem, nie każdy program może go odtwarzać, a jeśli jest używany na stronach internetowych, nie każda przeglądarka będzie mogła go pokazać. Czym kompresować? Jednym z wygodniejszych programów do kompresji jest SmartSaver Pro firmy Ulead. Pozwala na określenie konkretnego poziomu jakości i sprawdzenie jej w oknie podglądu. Oczywiście, popularne, standardowe programy do edycji obrazu, od Adobe Photoshop i Paint Shop Pro do Ulead PhotoImpact oraz MGI PhotoSuite, oferują bardzo kokładne ustawienia. Gdy wybierzesz opcję "Zapisz jako..." w programie Adobe Photoshop, możesz suwakiem wybrać poziom kompresji, skalę liczbową od 1 do 10 lub cztery poziomy, od niskiej do maksymalnej. 4

Możesz także wybrać polecenie przeznaczone do zapisywania zdjęć do użycia w Internecie. W tym przypadku możesz ocenić efekt kompresji w oknie podglądu. W programie Paint Shop Pro, stopień kompresji jest ustawiany w poleceniu "Save As" poprzez spisanie współczynnika kompresji od 1 do 99 lub suwaka pozwalającego na płynne ustawienia od jakości maksymalnej do minimalnej. Polecenie "Export JPEG File" w Paint Shop Pro umożliwia dodatkowo podgląd rezultatu kompresji. Kompresja bezstratna Dlaczego stosuje się kompresję? Kompresja jest sposobem na zmniejszenie wielkości plików bitmapowych. Kompresja bezstratna to metoda kodowania informacji do postaci zawierającą zmniejszoną liczbę bitów, aby cała informacja dała się odtworzyć jest to ZMNIEJSZENIE ROZMIARU PLIKU BEZ UTRATY ŻADNYCH INFORMACJI. RLE (Run-Lenght Encoding) czyli metoda kodowania długości ciągów Stosowana jest w takich formatach jak PCX, BMP, TGA, PDF * Wiele gier tworzy zrzuty ekranu w formacie TGA. Metoda ta polega na zastępowaniu serii takich samych danych występujących po sobie rekordem danych zawierającym kod wzorca oraz liczbę jego wystąpień (przykładem takiej metody jest metoda RLE (Run-Length Encoding) stosowana do kodowania obrazów). Czyli polega na opisywaniu ciągów tych samych znaków (bitów, bajtów, symboli) za pomocą zliczenia powtórzeń, określaniu długości podciągu, a dokładniej za pomocą par: licznik powtórzeń barwy-barwa. Przykład kompresji RLE aaaaaaabbbaaaaaaaa czyli 7 pikseli niebieskich, 3 czerwone, 8 niebieskich aaaaaabbaabbaaaaaa czyli 6 pikseli niebieskich, 2 czerwone,2 niebieskie, 2 czerwone, 6 niebieskich, aaaaabbbaaabbbaaaa 5 nieb, 3 czerw, 3 nieb, 3 czerw, 4 niebieskie Bez kompresji: 3x18 bajtów = 54 bajty Sposób kodowania: a7b3a8-6 bajtów a6b2a2b2a6-10 bajtów a5b3a3b3a4-10 bajtów suma: 26 bajty Stopień kompresji: 2:1 5

Właściwości kodowania długości serii (zalety i wady RLE): 1. Osiągany niezbyt duży stopień kompresji 2. Bardzo szybka kompresja i dekompresja, 3. Zakodowany strumień danych jest mało czuły na zakłócenia LZW jest algorytmem słownikowym. Metody słownikowe poszukują dokładnych wystąpień danego ciągu znaków Polega na przeglądaniu danych wejściowych w poszukiwaniu fraz identycznych z tymi, które są w słowniku Jeśli taka fraza zostanie wykryta to w jej miejsce w strumieniu danych wyjściowych wpisywana jest sekwencja kodowa, która identyfikuje pozycję frazy w słowniku. Wady i zalety kodowania metody LZW Etap kompresji jest znacznie dłuższy niż etap dekompresji, bo wymaga czasochłonnych operacji przeszukiwania strumienia danych wejściowych w celu wyodrębnienia powtarzających się fraz (budowa słownika). Podstawa działania takich formatów jak GIF, ZIP, ARJ, RAR. * ARJ jest jednym z formatów kompresji danych oraz programem do kompresji i dekompresji tego typu plików Metoda Huffmana Opracowana w 1960 roku przez Davida Huffmana, opiera się na statystycznym rozkładzie prawdopodobieństwa wystąpienia symboli w strumieniu danych wejściowych. Celem metody jest redukcja nadmiarowości kodu do reprezentacji poszczególnych symboli. Podstawą metody jest budowa drzewa Huffmana. Drzewo budowane jest od liści do korzenia. Każdy liść reprezentuje pojedynczy symbol z dziedziny danych. Wartość liścia oznacza liczbę wystąpień symbolu w strumieniu danych. Do każdego znaku prowadzi tylko jedna droga. Jeżeli rozgałęzienia na prawą stronę oznaczone zostaną 0 a na lewą 1 to dla każdego znaku można określić unikatowy kod binarny. Dla danej serii danych można zbudować więcej niż jedno drzewo, co oznacza, że w czasie dekompresji potrzebne jest drzewo według, którego dane zostały zakodowane. Wady i zalety metody Huffmana Metoda Huffmana właściwości: 1. Jedna z najczęściej wykorzystywanych metod kodowania (również jako element kompresji stratnej), 2. Osiągany stopień kompresji rzędu 20-40%, 3. Działa niezależnie od typu danych, 4. Wolniejsze działanie, ze względu na konieczność budowania drzewa (zwłaszcza w wersji adaptacyjnej), 5. Duża czułość na zakłócenia, wymaga specjalnych zabezpieczeń, aby nie nastąpiło przekłamanie w danych zakodowanych. W podanym przykładzie (w książce str. 242-243) 6

zakładamy, że nasz plik ma 1024*1024=1048576 bajtów. Każdy bajt jest kodowany na 8 bitach, nieskompresowany zajmuje 8*1048576=8388608 Z rozwiązania zadania wynika, że nam potrzeba po 3 bity na znak, czyli 3*1048576=3145728 bitów, czyli 3145728/8388608=37% wyjściowego pliku. Taki wynik osiąga się, gdy nasz alfabet ma kilka znaków, w przypadku gdy jest więcej, wynik jest gorszy Kodowanie arytmetyczne Podobnie jak metoda Huffmana opiera się na rozkładzie prawdpodobieństwa wystąpienia symbolu w strumieniu danych wejściowych. 1 symbol może opisywać ułamkową część bitu (1 bit może nieść więcej informacji niż o 1 znaku). Ideą tego kodu jest przedstawienie ciągu symboli jako podprzedziału przedziału jednostkowego [0,1) wyznaczonego rekursywnie na podstawie prawdopodobieństw wystąpienia tych symboli w strumieniu danych wejściowych. Ciąg kodowy reprezentujący kodowane symbole jest binarnym zapisem wartości z wyznaczonego w ten sposób przedziału. Wady i zalety kodowania arytmetyczego Kodowanie arytmetyczne właściwości: 1. Metoda daje lepszy stopień kompresji niż metoda Huffmana o kilka, kilkanaście procent. 2. Kodowanie arytmetyczne jest wolniejsze niż kodowanie Huffmana PODSUMOWANIE: 7

8

9

10

Algorytm Huffmana został zaproponowany w 1952 przez Davida Huffmana jako część rozwiązania zadania na zajęciach studenckich. Kody generowane przez ten algorytm nazywane są kodami Huffmana i są to kody prefiksowe. Kod jest kodem prefiksowym, jeśli żadne słowo kodu nie jest przedrostkiem żadnego innego słowa kodu. Algorytm Huffmana nie należy do najefektywniejszych systemów bezstratnej kompresji danych, dlatego też praktycznie nie używa się go samodzielnie. Często wykorzystuje się go jako ostatni etap w różnych systemach kompresji, zarówno bezstratnej, jak i stratnej, np. MP3lub JPEG. Pomimo że nie jest doskonały, stosuje się go ze względu na prostotę oraz brak ograniczeń patentowych. Jest to przykład wykorzystania algorytmu zachłannego. Konstrukcja drzewa kodowego Huffmana Konstrukcję optymalnego kodu prefiksowego zaproponował David Huffman. W tym punkcie wykładu przedstawimy metodę budowy drzewa kodowego dla optymalnego kodu prefiksowego Huffmana. Drzewo kodowe Huffmana jest drzewem binarnym, lokalnie pełnym. W każdym wierzchołku wewnętrznym tego drzewa pamiętamy sumę częstości znaków występujących w poddrzewach tego wierzchołka. Każdy wierzchołek drzewa będzie więc miał, oprócz referencji do lewego i prawego poddrzewa, atrybut f, oznaczający częstość występowania znaku lub grupy znaków odpowiadających drzewu o korzeniu w tym węźle. W liściach będą pamiętane dodatkowo znaki kodowanego alfabetu. Do zapamiętania alfabetu oraz wierzchołków tworzonego drzewa, algorytm Huffmana używa kolejki priorytetowej. Szkic algorytmu 1. Utwórz kolejkę priorytetową zawierającą węzły tworzonego drzewa. Początkowo elementami kolejki są liście drzewa. Porządek elementów w kolejce priorytetowej zależy od częstości przypisanej znakom. 2. Drzewo kodowe buduje się od dołu, od liści, które są traktowane jako drzewa z jednym tylko węzłem. W każdym kroku algorytmu, zamiast kolejnych dwóch wierzchołków, których częstości są najmniejsze, wstawiamy do kolejki priorytetowej pq nowy węzeł, którego etykietą jest suma częstości przypisanych usuniętym węzłom. Punkt 2 powtarzamy, tak długo, aż w kolejce priorytetowej pozostanie tylko jeden element. Będzie to korzeń drzewa kodowego. Przykład: 11

Przyjmijmy, że w pewnym tekście występują tylko litery A, F, H, M, N, U, a ich częstości występowania w tysiącach wynoszą odpowiednio:40,8,9,11,7,25. Kolejne fazy działania algorytmu Huffmana przedstawiono na rysunku 11.3. Z otrzymanego drzewa kodowego łatwo odczytujemy kody liter A - 0, F - 1101, H - 1110, M - 1111, N - 1100, U - 10. Ciąg 11101011011101111101100 jest kodem słowa HUFFMAN. 12

Poniżej Tablica ASCII 13

14

15

Opis: Algorytm LZW jest: algorytmem slownikowym, w którym nie istnieje predefiniowany slownik - jest on dynamicznie tworzony na podstawie ciagu danych wejsciowych (podczas kodowania i dekodowania). Buduje swój slownik z wystepujacych w danych wejsciowych znaków. algorytmem bezstratnym - dane zdekodowane sa identyczne z danymi przed kodowaniem. jednoprzebiegowy - dane sa czytane i kodowane na biezaco. jednoznaczny - odkodowanie slowa nie moze prowadzic do dwóch róznych wyników, dwa rózne slowa nie moga miec takiego samego kodu, co moze prowadzic do niescislosci. Jest to warunek konieczny kompresji. 2. OPIS ALGORYTMU Kodowanie metoda LZW Metoda kodowania algorytmem LZW nie jest skomplikowana. Dane wejsciowe sa sprawdzane ze slownikiem, jesli slowo wystepuje w slowniku to wczytujemy kolejny wyraz, laczymy z poprzednim i znów sprawdzamy, jesli wyrazu nie ma w slowniku to dolaczamy je do niego, nadajemy mu nowy kod a ostatni znak staje sie pierwszym znakiem slowa nadchodzacego (nowego) i zwracamy kod ostatniego ciagu który byl w slowniku. W algorytmie moze ale nie musi byc równiez wykorzystywany podstawowy i staly slownik (z pojedynczymi znakami). Jest to jednak rozwiazanie optymalizacyjne, taki slownik jest maly i bitowa reprezentacja kodów z takiego slownika bedzie krótsza niz ze slownika dynamicznego. 16

Dekodowanie metoda LZW Dekodowanie jest procesem odwrotnym. Podczas wczytywania danych dekoder tworzy taki sam slownik jaki stworzyl koder - co jest podstawa dzialania i warunkiem prawidlowej dekompresji. Slownik uaktualniany jest przy kazdym przetwarzanym slowie kodu (oprócz pierwszego z nich). Dla kazdego slowa kodu dekoder znajduje w slowniku i zwraca odpowiadajacy mu ciag. Dekoder zapamietuje ciag i wczytywane jest nastepne slowo. Algorytm ten okresla równiez dzialanie dla specjalnego przypadku, gdy slowo kodu nie ma w slowniku odpowiadajacego mu hasla. Dzieje sie tak gdy kodowany ciag znaków zawiera podciag scscs, gdzie s jest pojedynczym symbolem, C jest ciagiem o dowolnej dlugosci i sc znajduje sie juz w slowniku. 17

18