LZW tmrts Tth Istvn Algoritmusok s adatszerkezetek 2

  • Slides: 9
Download presentation
LZW tömörítés Tóth István Algoritmusok és adatszerkezetek 2.

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 LZ 78 továbbfejlesztése ▫ Terry

LZW – Áttekintés • Veszteségmentes tömörítési algoritmus • Az LZ 78 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 ▫

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 (max 12 -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

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 stringet haszná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: TOBEORNOTTOBEORNOT# ▫ # az input végét jelző

LZW működése - kódolás • Input string: TOBEORNOTTOBEORNOT# ▫ # az input végét jelző szimbólum • Kezdőszótár: az ábécé (26 betűvel), # Index: Szimbólum: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 # A B C D E F G H I J K L MN O P Q R S T U V WX Y Z

LZW működése - kódolás Kimenet String Következő karakter NULL T O B 20 15

LZW működése - kódolás Kimenet String Következő karakter NULL T O B 20 15 10100 01111 Index Eltárolt string 27: TO 28: OB B E 2 00010 29: BE E O O R 5 15 00101 01111 30: 31: EO OR Kód Szótár/kódtábla Bitek R N 18 10010 32: RN N O 14 001110 33: NO O T 15 001111 34: OT T T 20 010100 35: TT TO B 27 011011 36: TOB BE O 29 011101 37: BEO OR T 31 011111 38: ORT TOB E 36 100100 39: TOBE EO R 30 011110 40: EOR RN O 32 100000 41: RNO OT # 34 100010 0 000000 Megjegyzés 27 = első lehetséges index új szótárelem számára A következőnél 5 -ről 6 -ra növeljük a bitek számát # megállítja az algoritmust, kiírja a jelenlegi sorozatot és #-t

LZW működése - dekódolás Input Új szótárelem Bit Kód Kimeneti sorozat 10100 01111 20

LZW működése - dekódolás Input Új szótárelem Bit Kód Kimeneti sorozat 10100 01111 20 15 T O 27: TO 00010 2 B 28: 00101 01111 5 15 E O 29: 30: 10010 18 R 001110 14 001111 Teljes Megjegyzés Sejtés 27: 28: T? O? OB 29: B? BE EO 30: 31: E? O? 31: OR 32: R? a 31 kód létrehozása (utolsó 5 bitbe beleférő kód) N 32: RN 33: N? az input beolvasása 6 bitnél 15 O 33: NO 34: O? 010100 20 T 34: OT 35: T? 011011 27 TO 35: TT 36: TO? 011101 29 BE 36: TOB 37: BE? 36 = TO + az első jel (B) a következő megérkező szekvenciából (BE) 011111 31 OR 37: BEO 38: OR? 100100 36 TOB 38: ORT 39: TOB? 011110 30 EO 39: TOBE 40: EO? 100000 32 RN 40: EOR 41: RN? 100010 34 OT 41: RNO 42: OT? forrás: wikipedia. org

Változatai • LZMW ▫ Az inputban a leghosszabb, szótárban is lévő elemet keresi ▫

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