240 likes | 420 Views
LZW-algoritmus. Készítette: Lakos Péter. Veszteségmentes tömörítő eljárás Abraham L empel és Jacob Z iv 1978-ban publikálták az LZ78 algoritmust Az LZW ennek továbbfejlesztett változata, amit Terry W elch publikált 1984-ben
E N D
LZW-algoritmus Készítette: Lakos Péter
Veszteségmentes tömörítő eljárás • Abraham Lempel és Jacob Ziv 1978-ban publikálták az LZ78 algoritmust • Az LZW ennek továbbfejlesztett változata, amit Terry Welch publikált 1984-ben • Az LZW-algoritmust használja a compress / uncompress parancs UNIX rendszereken • Az LZW-algoritmus továbbfejlesztéseiből születtek a zip, gzip és bzip tömörítések LZW-algoritmus:
Adott egy T input string és egy S szótár • Az S a T-ben lévő betűkhöz és szavakhoz természetes számokat rendel • Készítsük el T kódját S kibővítésével, hogy az output kisebb méretű legyen, mint T! Feladat:
Példa tömörítésre Puffer: T: a b a b a b a b a b a b S: 0 : a 1 : b - • Tegyük a beolvasott karaktereket a pufferba, amíg apuffer tartalma + a következő karakter már nincs bennea szótárban • Írjuk ki a puffer tartalmát az outputra és vegyük fela szótárba a puffer tartalma + következő karaktert • Ezután a puffer tartalma legyen ez a következő karakter
Példa tömörítésre Puffer: T: a b a b a b a b a b a b S: 0 : a 1 : b - a Beolvassuk az a-t. Az a-t betesszük a pufferba Ekkor a puffer tartalma + a következő betű(a) már megvan a szótárban, ígytovább mehetünk
Példa tömörítésre Puffer: T: a b a b a b a b a b a b S: 0 : a 1 : b 2 : ab a b 0 Vegyük fel a szótárba a puffer tartalma + következő karaktert (ab) Most a puffer tartalma + következő karakter:„ab”, ami még nincs meg a szótárban A puffer tartalmát (annak kódját)kiírjuk az outputra A puffer tartalma legyen ez az új karakter (b)
Példa tömörítésre Puffer: T: a b a b a b a b a b a b S: 0 : a 1 : b 2 : ab 3 : ba b a 0 1 És így tovább…
Példa tömörítésre Puffer: T: a b a b a b a b a b a b S: 0 : a 1 : b 2 : ab 3 : ba 4 : aba a a ab 0 1 2 „ab” már benne van a szótárban
Példa tömörítésre Puffer: T: a b a b a b a b a b a b S: 0 : a 1 : b 2 : ab 3 : ba 4 : aba 5 : abab a ab b aba 0 1 2 4
Példa tömörítésre Puffer: T: a b a b a b a b a b a b S: 0 : a 1 : b 2 : ab 3 : ba 4 : aba 5 : abab 6 : bab b ba b 0 1 2 4 3
Példa tömörítésre Puffer: T: a b a b a b a b a b a b S: 0 : a 1 : b 2 : ab 3 : ba 4 : aba 5 : abab 6 : bab b bab ba 0 1 2 4 3
Példa tömörítésre Puffer: T: a b a b a b a b a b a b S: 0 : a 1 : b 2 : ab 3 : ba 4 : aba 5 : abab 6 : bab bab 0 1 2 4 3 6 A kapott kód tehát:0 1 2 4 3 6 Végezetül a puffer tartalmátkiírjuk az outputra
Példa visszafejtésre Input:0 1 2 4 3 6 S: 0 : a 1 : b A tömörítés logikáját alkalmazzuk visszafelé.
Példa visszafejtésre Input:0 1 2 4 3 6 S: 0 : a 1 : b a A 0-s kód megvan a szótárban, jelentése: a
Példa visszafejtésre Input:0 1 2 4 3 6 S: 0 : a 1 : b a A piros nyíl jelzi, hol tartott ekkor a tömörítés.
Példa visszafejtésre Input:0 1 2 4 3 6 S: 0 : a 1 : b 2 : ab a b Az „ab” ekkor még nem volt benne a szótárban,ezért most bekerült És így tovább…
Példa visszafejtésre Input:0 1 2 4 3 6 S: 0 : a 1 : b 2 : ab 3 : ba a b ab A 4-es kód ismeretlen, de tudjuk,hogy ezen a ponton egy abx szó került bea szótárba 4-esként
Példa visszafejtésre Input:0 1 2 4 3 6 S: 0 : a 1 : b 2 : ab 3 : ba 4 : abx a b abx ab A 4-es kód ismeretlen, de tudjuk,hogy ezen a ponton egy abx szó került bea szótárba 4-esként
Példa visszafejtésre Input:0 1 2 4 3 6 S: 0 : a 1 : b 2 : ab 3 : ba 4 : abx a b abx ab aba 4 : aba Ezt visszahelyettesítve látjuk, hogy x = a
Példa visszafejtésre Input:0 1 2 4 3 6 S: 0 : a 1 : b 2 : ab 3 : ba 4 : aba 5 : abab a b aba ba ab
Példa visszafejtésre Input:0 1 2 4 3 6 S: 0 : a 1 : b 2 : ab 3 : ba 4 : aba 5 : abab 6 : bay a b aba ba bay ab A 6-os kód szintén ismeretlen,ugyanúgy járunk el, mint korábban
Példa visszafejtésre Input:0 1 2 4 3 6 S: 0 : a 1 : b 2 : ab 3 : ba 4 : aba 5 : abab 6 : bay a b aba ba bay bab ab 6 : bab
Példa visszafejtésre Input:0 1 2 4 3 6 S: 0 : a 1 : b 2 : ab 3 : ba 4 : aba 5 : abab 6 : bab a b aba ba bab ab Az input végére értünk,a kapott string tehát:abababababab
Megjegyzés: • A szótárat nem kell elküldeni a címzettnek, a példában látott módon a visszafejtő algoritmus azt megkonstruálja • DE a szövegben lévő betűk kódját ismerni kell a visszafejtés elkezdése előtt (lehet közös kódkészlet) • További információk, példa:http://en.wikipedia.org/wiki/Lempel%E2%80%93Ziv%E2%80%93Welch