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

Podobne dokumenty
Kodowanie informacji

AKD Metody słownikowe

Nierówność Krafta-McMillana, Kodowanie Huffmana

Kompresja bezstratna. Entropia. Kod Huffmana

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

Kodowanie informacji

pobieramy pierwszą literę komunikatu i wypełniamy nią (wszystkie pozycje tą samą literą) bufor słownikowy.

Kody Tunstalla. Kodowanie arytmetyczne

Kodowanie i kompresja Streszczenie Studia dzienne Wykład 9,

Kodowanie Shannona-Fano

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

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

Temat: Algorytm kompresji plików metodą Huffmana

Ćwiczenie nr 4: Kodowanie arytmetyczne, range coder

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

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

Kompresja Kodowanie arytmetyczne. Dariusz Sobczuk

Kodowanie i kompresja Streszczenie Studia Licencjackie Wykład 11,

Kompresja danych kodowanie Huffmana. Dariusz Sobczuk

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

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

0-0000, , , itd

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

Podstawowe pojęcia. Teoria informacji

Algorytmy i struktury danych

Kodowanie i kompresja Tomasz Jurdziński Studia Wieczorowe Wykład Kody liniowe - kodowanie w oparciu o macierz parzystości

2 Kryptografia: algorytmy symetryczne

Wstęp do Informatyki

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

Definicja. Jeśli. wtedy

Kompresja danych Streszczenie Studia Dzienne Wykład 10,

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

Kodowanie predykcyjne

Kodowanie i kompresja Streszczenie Studia dzienne Wykład 6

dr inż. Jarosław Forenc

Algorytmy i. Wykład 5: Drzewa. Dr inż. Paweł Kasprowski

Kodowanie predykcyjne

Przetwarzanie obrazu cyfrowego

Pracownia Komputerowa wykład IV

Jednym z najprostszych sposobów porządkowania jest technika stosowana przy sortowaniu listów:

KOMPRESJA OBRAZÓW STATYCZNYCH - ALGORYTM JPEG

teoria informacji Kanały komunikacyjne, kody korygujące Mariusz Różycki 25 sierpnia 2015

Kwantyzacja wektorowa. Kodowanie różnicowe.

Modulacja i kodowanie. Labolatorium. Kodowanie źródłowe Kod Huffman a

Wprowadzenie do informatyki i użytkowania komputerów. Kodowanie informacji System komputerowy

Kompresja obrazów w statycznych - algorytm JPEG

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

Logiczny model komputera i działanie procesora. Część 1.

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

Entropia Kodowanie. Podstawy kompresji. Algorytmy kompresji danych. Sebastian Deorowicz

Teoria Informacji - wykład. Kodowanie wiadomości

Teoria Informacji i Metody Kompresji Danych

Pracownia Komputerowa wyk ad IV

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

Blockly Kodowanie pomoc.

Algorytmy i struktury danych. wykład 8

16MB - 2GB 2MB - 128MB

Algorytmy kompresji. Kodowanie Huffmana, kodowanie arytmetyczne

Krzysztof Leszczyński Adam Sosnowski Michał Winiarski. Projekt UCYF

Kodowanie transformacyjne. Plan 1. Zasada 2. Rodzaje transformacji 3. Standard JPEG

ZŁOŻONOŚĆ OBLICZENIOWA ALGORYTMÓW

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

Algorytmy i struktury danych. Wykład 6 Tablice rozproszone cz. 2

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

Kodowanie i entropia

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

Python: JPEG. Zadanie. 1. Wczytanie obrazka

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

Zadania do wykonania. Rozwiązując poniższe zadania użyj pętlę for.

Haszowanie (adresowanie rozpraszające, mieszające)

Języki i metodyka programowania. Reprezentacja danych w systemach komputerowych

Algorytmy stochastyczne, wykład 05 Systemy Liendenmayera, modelowanie roślin

Dla człowieka naturalnym sposobem liczenia jest korzystanie z systemu dziesiętnego, dla komputera natomiast korzystanie z zapisu dwójkowego

Języki formalne i automaty Ćwiczenia 6

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Kodowanie transformujace. Kompresja danych. Tomasz Jurdziński. Wykład 11: Transformaty i JPEG

Maszyna Turinga języki

Technologie Informacyjne

Algorytmy sortujące i wyszukujące

Teoria przetwarzania A/C i C/A.

Algorytmy i struktury danych. Wykład 4 Tablice nieporządkowane i uporządkowane

Algorytmy i struktury danych

KOMPRESJA STRATNA I BEZSTRATNA

Tajna wiadomość. Scenariusz lekcji

Komunikacja człowiek-komputer

0 + 0 = 0, = 1, = 1, = 0.

dr inż. Jarosław Forenc

dr inŝ. Jarosław Forenc

Teoretyczne Podstawy Informatyki

INŻYNIERIA BEZPIECZEŃSTWA LABORATORIUM NR 2 ALGORYTM XOR ŁAMANIE ALGORYTMU XOR

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 2 WSTĘP DO INFORMATYKI

Kompresja danych. Tomasz Jurdziński. Wykład 6: kodowanie gramatykowe

Tematy projektów Algorytmy Kompresji Danych (2006)

Teoria informacji i kodowania Ćwiczenia

Excel - podstawa teoretyczna do ćwiczeń. 26 lutego 2013

Streszczenie Komputery do przechowywania rysunków, zdjęć i innych obrazów używają tylko liczb. Te zajęcia mają ukazać w jaki sposób to robią.

Podstawowe operacje arytmetyczne i logiczne dla liczb binarnych

Pracownia Komputerowa wyk ad VII

Kody Huffmana. Konrad Wypyski. 11 lutego 2006 roku

Transkrypt:

Tomasz Wykład 5: kodowanie słownikowe

Motywacja Motywacje 1 zazwyczaj dane nie tworza ciagu wartości niezależnych, kolejny symbol jest zależny od poprzedzajacych go; 2 pewne sekwencje (słowa) często się powtarzaja. Słowniki statyczne: korzystamy z ustalonego słownika; tekst kodujemy jako ciag słów ze słownika, każde słowo kodowane przez jego pozycję w słowniku. Co z elementami, których brak w słowniku: można np. umieścić w nim pojedyncze litery.

Przykład: kodowanie digramowe Przykład: kodowanie digramowe słownik o ustalonej wielkości sklada się ze wszystkich liter i tylu par liter (digramów), ile się w nim zmieści (wybieramy najbardziej prawdopodobnepary). przykład: dla słownika o rozmiarze 256 i alfabetu zlożonego z drukowalnych znaków ASCII, których jest 95, w słowniku można umieścić161 par.

Słowniki dynamiczne Dlaczego słowniki statyczne nieskuteczne Wrażliwe na zmianę charakteru danych. Na czym polega słownik dynamiczny dostosowany do charakteru danych; tworzony w trakcie kodowania; zmienia się w trakcie kodowania; dekoder może go odtworzyć w oparciu o odkodowana część danych (nie trzeba słownika dołaczać do danych);

czyli nietypowy słownik Ziv i Lempel, 1977; Idea: słownikiem jest zakodowana/odkodowana część tekstu. Dokładniej: dla zakodowanej części x 1...x n i niezakodowanej x n+1...x m szukamy najdłuższego podsłowa x 1...x n, które jest prefiksem x n+1...x m, czyli dopasowania... i kodujemy ten prefiks poprzez wskazanie jego pozycji w x 1...x n.

Jak kodujemy dopasowanie Kodowanie dopasowania jako para (j,k), gdzie j to odległość między poczatkiem kodowanej części (pozycja n + 1) a poczatkiem dopasowania k to długość dopasowania. Przykład tekst: ABXAXABAXAXBBAB zakodowane: ABXAXABA, niezakodowane: XAXBBAB najdłuższe dopasowanie ABXAX ABAXAX BBAB kodowanie: (6, 3).

Problem 1 Co z brakiem dopasowania tekst: ABXAXABADAXBBAB zakodowane: ABXAXABA, niezakodowane: DAXBBAB najdłuższe dopasowanie: brak! rozwiazanie: (0,0,kod(D)). gdzie kod jest pewnym ustalonym kodem prefiksowym dla alfabetu wejściowego. Ogólnie Kodujemy dopasowanie przy pomocy trójki przesunięcie długość dopasowania kod symbolu występujacego za dopasowaniem w niezakodowanej części tekstu.

Kodowanie: przykłady Sytuacja typowa tekst: ABXAXABAXAXBBAB zakodowane: ABXAXABA, niezakodowane: XAXBBAB najdłuższe dopasowanie ABXAX ABAXAX BBAB kodowanie: (6, 3, kod(b)). Sytuacja nietypowa tekst: ABXAXABADAXBBAB zakodowane: ABXAXABA, niezakodowane: DAXBBAB najdłuższe dopasowanie: brak! kodowanie: (0, 0, kod(d)).

Kodowanie: przykłady Sytuacja nietypowa Zaczynamy kodowanie, czyli część zakodowana jest pusta: pierwsza literę x 1 kodujemy jako (0,0,kod(x 1 )) czyli uznajemy, że brakuje dopasowania.

Kodowanie: sytuacje nietypowe Dopasowanie wybiega poza zakodowana część tekst: ADABRARRARRAD zakodowane: ADABRAR, niezakodowane: RARRAD najdłuższe dopasowanie standardowo : ADABRARRARRAD standardowe kodowanie: (3, 3, kod(r))... można wydłużyć do 5 znaków: (3,5,kod(D))

Kodowanie ogólnie Ogólnie dla zakodowanej części x 1...x n i niezakodowanej x n+1...x m szukamy najdłuższego podsłowa x 1...x m, które zaczyna się w części x 1...x n i jest prefiksem x n+1...x m... i kodujemy ten prefiks poprzez wskazanie przesunięcia, dopasowania i znaku za dopasowaniem: (p,d,kod(x n+1+d )) gdzie x n+1 p...x n+1 p+d 1 = x n+1...x n+1+d 1.

Problemy z kodowaniem Problemy z kodowaniem trójek Efekty wartości przesunięcia z potencjalnie nieskończonego zbioru; podobnie długości dopasowania. nie możemy stosować kodów o stałej długości; długi czas poszukiwania dopasowania! konieczność przechowywania (najlepiej) w pamięci operacyjnej całej zakodowanej już części tekstu.

LZ 77 Jak na prawdę wyglada bufor słownikowy: sufiks już zakodowanej części tekstu, o ustalonym rozmiarze s; bufor kodowania: prefiks jeszcze nie zakodowanej części tekstu, o ustalonym rozmiarze t; okno: bufor słownikowy + bufor kodowania; rozmiar okna s + t. : jak kodujemy dopasowań szukamy tylko w buforze słownikowym dopasowanie nie może wybiegać poza bufor kodowania (wcześniejszy tekst): (p,d,kod(x n+1+d )) gdzie x n+1 p...x n+1 p+d 1 = x n+1...x n+1+d 1 oraz n + 1 p + d 1 n + 1 + t 1 (t: rozmiar bufora kodowania).

LZ 77: długość reprezentacji trójek Kodujemy trójkę (p, d, kod(a)) p s, a zatem można zapisać na logs bitach; d s + t, a zatem można zapisać na log(s + d) bitach; kod(a) zapisujemy na log A bitach, gdzie A to alfabet wejściowy.

: ostateczny algorytm kodowania Krok algorytmu Znajdź najdłuższe dopasowanie dla prefiksu bufora kodowania w buforze słownikowym: szukamy w buforze słownikowym od końca (zakładamy, że bardziej prawdopodobne sa powtórzenia w małej odległości). Zakoduj dopasowanie przy pomocy trójki: (p, d, C), gdzie: p to przesunięcie (odległość poczatku najlepszego dopasowania od bufora kodowania) d to długość dopasowania C to kod symbolu występujacego za dopasowanym prefiksem bufora kodowania Przesuń okno o d + 1 pozycji w prawo.

: przykład kodowania Przykład bufor słownikowy: s = 4; bufor kodowania: t = 4; kodowany tekst: aaaabababaaab$ aaaa bababaaab$ 0, 0, a aaaab ababaaab$ 1, 3, b aaaababab aaab$ 2, 5, a aaaabababaaab$ 4, 2, $ zielony: bufor kodowania, czerwony: bufor słownikowy.

: dekodowanie Dekodowanie Dane: Ciag trójek (p 1,d 1,kod(c 1 ))...(p n,d n,kod(c n )). Odkodowany tekst x zainicjuj jako tekst pusty. Dla i = 1,2,...,n do odkodowanego tekstu x = x 1...x m dołacz fragment x m pi +1...x m pi +d i c i : x x 1...x m x m pi +1...x m pi +d i c i.

: implementacja Dekodowanie Nie ma potrzeby wyszukiwania dopasowania: dekodowanie dużo prostsze. Kodowanie jak szybko można szukać dopasowań?

Szukanie dopasowań ZIP i GZIP rozmiar okna: bufor słownikowy 32KB, bufor kodowania 258 bajtów; reprezentacja słownika (czyli zawartości bufora słownikowego): tablica hashujaca pozycji poczatkowych dla ciagów 3-literowych; elementy tablicy to listy, w których na przodzie najpóźniejsze wpisy (najbliższe dopasowania); wpisy spoza bufora słownikowego usuwane ( leniwie, po odwiedzeniu ich). krotki kodowane przy pomocy algorytmu Huffmana (adaptacyjnie, dla uniknięcia 2 przebiegów); kodowanie w blokach.

Szukanie dopasowań Storer, Szymanski (w opisie LZSS) bufor kodowania w kolejce cyklicznej; wszystkie t-elementowe podsłowa bufora słownikowego w drzewie binarnym: szczegóły na ćwiczeniach (t to rozmiar bufora kodowania).

Modyfikacje Stopień kompresji LZSS: usuwamy trzeci element, dodajemy flagę bitowa informujac a do każdej trójki, czy było niezerowe dopasowanie: jeśli nie, kodujemy tylko jeden znak jego standardowym kodem, jeśli tak, kodujeym wartości przesunięcia i długości; kompresje powstajacych trójek (Huffman, kodowanie arytmetyczne,...) lub trzeciego elementu trójki (np. w ZIP, ARJ), zmiana rozmiaru buforów w trakcie (de)kodowania.

: podsumowanie Podsumowanie oparty na założeniu: powtórzenia występuja w niedużej odległości; wiele zastosowań: zip, gzip, PNG, PKzip, arj, rar,... kodowanie bardziej kosztowne od dekodowania, możliwy kompromis między stopniem kompresji a szybkościa algorytmu.

: idea : idea Cel: odejść od założenia, że powtórzenia występuja w małej odległości. Słownik: poindeksowany zbiór słów. Zawartość słownika: tworzona w oparciu o zakodowana/odkodowan a część tekstu. Kodowanie: ciag indeksów odowiadajacych słowom ze słownika.

: Algorytm 1 Słownik zbiór pusty Aż do zakodowania całego tekstu: znajdź w- najdłuższy prefiks niezakodowanej części tekstu występujacy w słowniku, symbol występujacy w niezakodowanej części tekstu za w oznaczmy przez a, pozycję w w słowniku przez n, zakoduj 2a za pomoca pary (n,kod(a)) UWAGA: jeśli pierwszy znak niezakodowanej części tekstu nie występuje w słowniku, to n = 0 dodaj do słownika słowo wa.

: przykład Tekst: T A T A T A T A T Zakodowane: Słownik: pusty

: przykład Tekst: T A T A T A T A T Zakodowane: (0, T) Słownik: 1 T

: przykład Tekst: T A T A T A T Zakodowane: (0, T) (0, A) 1 T Słownik: 2 A

: przykład Tekst: T A T A T A T A T Zakodowane: (0, T) (0, A) (1,A) 1 T Słownik: 2 A 3 TA

: przykład Tekst: T A T A T A T A T Zakodowane: (0, T) (0, A) (1,A) (3,T) 1 T 2 A Słownik: 3 TA 4 TAT

: przykład Tekst: T A T A T A T A T A T Zakodowane: (0, T) (0, A) (1,A) (3,T) (2,T) 1 T 2 A Słownik: 3 TA 4 TAT 5 AT

: dekodowanie : Algorytm dekodowania Słownik zbiór pusty Odkodowujemy pary na podstawie zawartości słownika: dla kolejnej pary (n, kod(a)) na koniec odkodowanej części tekstu dodajemy xa, gdzie x to element słownika na pozycji n; jeśli słownik nie jest pełen: po odkodowaniu xa (x - element słownika, a - znak za nim występujacy), dodajemy xa do słownika. : kodowanie a dekodowanie kodowanie: szukamy najdłuższego dopasowania do pozycji w słowniku; dekodowanie: bez szukania dopasowań, kopiujemy odpowiednie fragmenty.

: stary problem... Jak reprezentować pary pozycje w słowniku: jaki zakres? na ilu bitach? litery: ustalony kod stały. : standardowe rozwiazanie rozmiar słownika z góry ustalony; po wypełnieniu słownika, kodujemy kolejne dopasowania bez modyfikacji słownika.

: inny stary problem... Co z drugim elementem każdej pary potrzebny dla pierwszych wystapień liter w tekście; ALE zmniejsza stopień kompresji: część tekstu kodowana bez wykorzystania kontekstu!

LZW, czyli optymalizujemy... LZW: idea zamiast pary (pozycja, litera), kodujemy tylko pozycję w, najdłuższego dopasowania, ALE na poczatku w słowniku umieszczamy wszystkie symbole alfabetu, bo... w przeciwnym razie nie moglibyśmy zaczać kodowania i kontynuować w momencie napotkania symbolu, od którego nie zaczyna się żadna pozycja słownika. LZW: jak rozszerzamy słownik zgodnie z : do słownika dodajemy konkatenację zakodowanego elementu słownika w i występujacego za nim znaku a.

LZW: kodowanie LZW: algorytm kodowania Umieść w słowniku wszystkie możliwe ciagi jednoliterowe (czyli litery alfabetu). Dopóki niezakodowana część tekstu nie jest pusta: znajdź w najdłuższy prefiks niezakodowanej części tekstu, który występuje w słowniku; zakoduj w jako n, jego pozycję w słowniku; dodaj do słownika wa, gdzie a jest symbolem występujacym za prefiksem w w niezakodowanej części tekstu.

LZW: przykład kodowania Tekst: T A T A T A T A T Zakodowane: 1 T Słownik: 2 A

LZW: przykład kodowania Tekst: T A T A T A T A T Zakodowane: 1 1 T Słownik: 2 A 3 TA

LZW: przykład kodowania Tekst: T A T A T A T A T Zakodowane: 1 2 1 T 2 A Słownik: 3 TA 4 AT

LZW: przykład kodowania Tekst: T A T A T A T A T Zakodowane: 1 2 3 1 T 2 A Słownik: 3 TA 4 AT 5 TAT

LZW: przykład kodowania Tekst: T A T A T A T A T Zakodowane: 1 2 3 5 1 T 2 A 3 TA Słownik: 4 AT 5 TAT 6 TATA

LZW: przykład kodowania Tekst: T A T A T A T A T Zakodowane: 1 2 3 5 4 1 T 2 A 3 TA Słownik: 4 AT 5 TAT 6 TATA

LZW: problemy z dekodowaniem LZW: dekoder wie za mało? W jednym kroku: koder dodaje do słownika słowo wa i koduje w dekoder dekoduje w, ale nie zna jeszcze a! Rozwiazanie brakujac a literę odkodujemy w następnym kroku... jest nia pierwsza litera następnego odkodowanego fragmenty... czyli pierwsza litera pozycji słownika, która odkodujemy jako następna.

LZW: przykład dekodowania Tekst: Zakodowane: 1 2 3 5 4 1 T Słownik: 2 A

LZW: przykład dekodowania Tekst: T Zakodowane: 1 2 3 5 4 1 T Słownik: 2 A 3 T?

LZW: przykład dekodowania Tekst: T A Zakodowane: 1 2 3 5 4 1 T 2 A Słownik: 3 T A 4 A?

LZW: przykład dekodowania Tekst: T A T A Zakodowane: 1 2 3 5 4 1 T 2 A Słownik: 3 T A 4 A T 5 T A? Problem: odkodowujemy pozycję 5, która nie jest do końca znana! ale zgodnie z reguła, ta pozycja jest równa pierwszej pozycji właśnie odkodowanej pozycji słownika, czyli T; zatem pozycja 5 jest równa T A T!

LZW: przykład dekodowania Tekst: T A T A T A T Zakodowane: 1 2 3 5 4 1 T 2 A 3 T A Słownik: 4 A T 5 T A T 6 T A T?

LZW: przykład dekodowania Tekst: T A T A T A T A T Zakodowane: 1 2 3 5 4 1 T 2 A 3 T A Słownik: 4 A T 5 T A T 6 T A T A

LZW: dekodowanie LZW: algorytm dekodowania Dane: ciag liczb p 1,...,p n. Algorytm: Umieszczamy w słowniku S wszystkie możliwe ciagi jednoliterowe (czyli litery alfabetu). Dla i = 1,2,...,n, Jeśli w poprzednim kroku do słownika dodany był element w?, to zamień go na ws[p i ][1] (czyli pierwsza literę ze słowa o numerze p i ) Do tekstu odkodowanego dołacz na koniec element słownika z pozycji p i, czyli S[p i ] do słownika dodaj element S[p i ]?.

LZW: implementacja Jak przyspieszyć wyszukiwanie Wszystkie elementy słownika przechowujemy w strukturze trie.

LZW: zastosowania compress - Unix Modyfikacje LZW: rozmiar słownika zmienny (od 512 do 2 max, gdzie max 16), na poczatku rozmiar słownika to 512 (gdy słownik jest mniejszy, stosujemy krótsze słowa kodowe!) gdy słownik pełny i spada stopień kompresji - oczyszczanie słownika. Strategie oczyszczania słownika usunięcie wszystkiego i tworzenie od nowa; usuwanie najdawniej użytej pozycji; usuwanie pozycji najwcześniej wstawionej do słownika.

LZW: zastosowania GIF=Graphics Interchange Format Modyfikacje algorytmu LZW i format danych: poczatkowy rozmiar słownika to 2 b+1, liczba 2 b oznacza kod oczyszczajacy (wystapienie go oznacza operację czyszczenia słownika) rozmiar słownika podwajany po wypełnieniu, do rozmiaru 4096 pozycji (mało!); potem słownik statyczny

LZW: zastosowania przesyłanych przez modem - V.42 bis Modyfikacje LZW: rezygnacja z używania pozycji słownika, które nie jest znana w momencie dekodowania; słownik o dynamicznym rozmiarze (od 512 do 2048 lub więcej) kody sterujace umożliwiajace operacje: przejście do trybu przezroczystego (bez kompresji -np. dla danych skompresowanych, losowych); oczyszczenie słownika; zwiększenie rozmiaru słownika - oczyszczanie słownika stopniowe, zaczyna się od najstarszych wpisów.