90 likes | 189 Views
LZW tömörítés. Tóth István Algoritmusok és adatszerkezetek 2. LZW – Áttekintés. Veszteségmentes tömörítési algoritmus Az LZ78 továbbfejlesztése Terry Welch publikálta 1984-ben Fő felhasználása: A Unix „ compress ” segédprogramja GIF TIFF és PDF tömörítő-algoritmusai közt is szerepel.
E N D
LZW tömörítés Tóth István Algoritmusok és adatszerkezetek 2.
LZW – Áttekintés • Veszteségmentes tömörítési algoritmus • Az LZ78 továbbfejlesztése • Terry Welch publikálta 1984-ben • Fő felhasználása: • A Unix „compress” segédprogramja • GIF • TIFF és PDF tömörítő-algoritmusai közt is szerepel
LZW működése - általános • Szótár: • Inicializáláskor: minden lehetséges egybetűs szimbólumot tartalmaz • Folyamatosan bővül • Kódolás: • Inputból olvassa a szimbólumokat, amíg a szótárban van a sorozat • Amikor nincs: sorozat indexét elküldjük, az új sorozatot (a következő karakterrel kiegészítve) felvesszük a szótárba, ettől a karaktertől folytatjuk • Eltárolt kódok változó bitszélességben: alapból 1 bittel hosszabb, amint szükséges, 1 bittel növeli (max12-ig) • Speciális kódok: • Törlőkód: a szótár felszabadítására • Stop-kód: üzenet végét jelzi
LZW működése - általános • Dekódolás: • Az alapszótárral kezd, ugyanúgy felépíti, mint kódolásnál • Beolvas inputról egy szimbólumot (index), megkeresi a szótárban, kiadja a hozzá tartozó stringet • Ennek az első karakterét hozzáadja ahhoz a stringhez, amivel dolgozik • Az összefűzöttet hozzáadja a szótárhoz • Újrakezdés, a dekódolt stringethasználva • Az LZW használati módjában meg kell egyezzen a kódolóval (ábécé mérete, kód maximális szélessége, eredeti kódméret, stb)
LZW működése - kódolás • Input string: TOBEORNOTTOBEORTOBEORNOT# • # az input végét jelző szimbólum • Kezdőszótár: az ábécé (26 betűvel), # Index: Szimbólum:
LZW működése - dekódolás forrás: wikipedia.org
Változatai • LZMW • Az inputban a leghosszabb, szótárban is lévő elemet keresi • Összefűzi ezt a stringet az előző kikeresett elemmel, hozzáadja a szótárhoz • Gyorsabban nő a szótár, implementálás viszont nehezebb • LZAP • Az LZMW módosított változata • Karakterenként fűzi hozzá az új stringet az előzőhöz • Mindegyik elemet hozzáadja a szótárhoz • LZWL • Az LZW szótagalapú változata