Informatikai Rendszerek Alapjai Dr. Kutor László Minimális redundanciájú kódok (2) Szótár alapú tömörítő algoritmusok 2014. ősz Óbudai Egyetem, NIK Dr. Kutor László IRA 8/25/1
Az információ redundanciája H S = - p{ x i }* log 2 p{x i } i=1 H max = k log (n) (Hartley) (Shannon-Wiener) n H max = - n 1/n * log (1/n)= - log (1/n) = log(n) i=1 H relatív = H S H max R S = (1 - H S H max )* 100 2014. ősz Óbudai Egyetem, NIK Dr. Kutor László IRA 8/25/2
Példa a Huffman algoritmusra (ism.) Szimbólumok Előfordulások Információ Bitek száma száma tartalom A 15 1.38 20.68 B 7 2.48 17.35 C 6 2.7 16.2 D 6 2.7 16.2 E 5 2.96 14.82 A (15) B (7) C (6) D (6) E (5) 1 0 A (15) DE (11) B (7) C (6) 1 0 A (15) BC(13) DE (11) 2014. ősz Óbudai Egyetem, NIK Dr. Kutor László IRA 8/25/3 1 0 BCDE(24) A (15) 1 0 A = 0 B = 111 C = 110 D = 101 E = 100 ASCII 39* 8 = 312 Huffmann 87?
A kódolási példa fa szerkezete D E B C A levelek D 1 0 E B 1 0 C DE 0 1 BC BCDE 1 0 A gyökér A = 0 B = 111 C = 110 D = 101 E = 100 2014. ősz Óbudai Egyetem, NIK Dr. Kutor László IRA 8/25/4
Dekódolás példa a Huffman algoritmhoz Dekódolandó üzenet: 1101001010111101000110 Kódtábla: A = 0 B = 111 C = 110 D = 101 E = 100 C E D A B D AAAC Visszafejtett kód: CEDABDAAAC Óbudai Egyetem, NIK Dr. Kutor László 2014. ősz IRA 8/25/5
2. példa a Huffman algoritmusra: Kódolandó szöveg: Semmi nem olyan egyszerű, mint amilyennek látszik 1. A karakterek gyakoriságának meghatározása = 2, S=1, e=6, m=5, i=4, _=6, n=5, o=1, l=3, y=3, a=2, g=1, s=2, z=2, r=1, ű=1,,=1, t=2, k=2 =50 2. Gyakoriság szerinti rendezés 3. A kevésbé gyakori karaktereket kettesével összevonjuk és beírjuk a gyakorisági sorba, ami két elemű lesz a lista 4. A lista elemekhez rendre 0-át és 1-et rendelve létrehozzuk, majd kiolvassuk a kódot e(6) (6) m(5) n(5) i(4) l(3) y(3) (2) a(2) s(2) z(2) t(2) k(2) o(1) r(1) ű(1) g(1),(1) 2014. ősz Óbudai Egyetem, NIK Dr. Kutor László IRA 8/25/6
FAX gépek adattömörítése CCITT szerint G1, G2, G3 (G4?) A4-es oldal felbontás átvitel továbbításához (vonal/mm) szükséges idő: vivő G1 6 perc 3.85 analóg (1300.1700 Hz) G2 3 perc 3.85 analóg (2100) G3 40-60 s 3.85(7.7) CCITT (2400 bit/s) A 215 mm hosszú sor 1728 pontból áll Egydimenziós kódolás Kétdimenziós kódolás (15 20 mp) 2014. ősz IRA 8/25/7
Minimum redundanciájú kódok 3. Aritmetikai kód (1952) US Pat. #: 4,905,297 Az egész üzenetet egy számmal helyettesítjük Például: BILL GATES 0.2572167752 2014. ősz Óbudai Egyetem, NIK Dr. Kutor László IRA 8/25/8
Az aritmetikai kódolás algoritmusa 1. Az üzenetekben előforduló szimbólumok előfordulási gyakoriságának meghatározása 2. Minden szimbólumhoz hozzárendelünk egy 0 1 közé eső számtartományt. A számtartomány nagysága arányos a szimbólum relatív gyakoriságával 3. A teljes karaktersorozatot egy számmá alakítjuk. Az átalakítást úgy végezzük, hogy az üzenetben egymás után következő karakterek által kijelölt számtartományt lépésről lépésre beszűkítjük, míg végül egy számhoz jutunk 2014. ősz Óbudai Egyetem, NIK Dr. Kutor László IRA 8/25/9
1. példa az aritmetikai kódolásra Kódolandó szöveg: ALMA Szimbólumok Előfordulások Relatív Számtartomány száma gyakoriság A 2 2/4 0 <=t A < 0.5 L 1 1/4 0.5 <=t L < 0.75 M 1 1/4 0.75<=t M < 1 A L M 0 <= t A < 0. 5 0.25 <= t AL < 0.375 0.34375 <= t ALM < 0.375.. 0. <= t ALMA < 0.. 2014. ősz Óbudai Egyetem, NIK Dr. Kutor László IRA 8/25/10
2. példa az aritmetikai kódolásra Kódolandó szöveg: BILL_GATES Data Compression book Mark Nelson 1991 Szimbólumok Előfordulások Relatív száma gyakoriság Számtartomány -_ 1 1/10 0.00 <= t _ < 0.10 A 1 1/10 0.10 <= t A < 0.20 B 1 1/10 0.20 <= t B < 0.30 E 1 1/10 0.30 <= t E < 0.40 G 1 1/10 0.40 <= t G < 0.50 I 1 1/10 0.50 <= t I < 0.60 L 2 2/10 0.60 <= t L < 0.80 S 1 1/10 0.80 <= t S < 0.90 T 1 1/10 0.90 <= t T < 1.00 2014. ősz Óbudai Egyetem, NIK Dr. Kutor László IRA 8/25/11
2/2. példa az aritmetikai kódolásra Kódolt szöveg: BILL_GATES 0.2572167752 Kódtáblázat 0.00 <= < 0.10 0.10 <= A < 0.20 0.20 <= B < 0.30 0.30 <= E < 0.40 0.40 <= G < 0.50 0.50 <= I < 0.60 0.60 <= L < 0.80 0.80 <= S < 0.90 0.90 <= T < 1.00 Számtartomány alsó érték felső érték B 0.2 0.3 I 0.25 0.26 L 0.256 0.258 L 0.2572 0.2576-0.25720 0.25724 G 0.257216 0.257220 A 0.2572164 0.2572168 T 0.257216772 0.257216776 E 0.257216772 0.257216776 S 0.2572167752 0.2572167756 2014. ősz Óbudai Egyetem, NIK Dr. Kutor László IRA 8/25/12
2/3. példa az aritmetikai kódolásra: Dekódolás Kiinduló kód: 0.2572167752 Kódtáblázat 0.00 <= < 0.10 0.10 <= A < 0.20 0.20 <= B < 0.30 0.30 <= E < 0.40 0.40 <= G < 0.50 0.50 <= I < 0.60 0.60 <= L < 0.80 0.80 <= S < 0.90 0.90 <= T < 1.00 1. 0.2572167752 B 0.2572167752 a 0.2 (a tartomány alsó értéke) b 0.0572167752 /0.1=0.57216 2. 0.572167752 I tartomány a 0.5 b 0.072167752 /0.1=0.7216. 3. 0.72167752 L a 0.6 b 0.12167752/0.2= 0.6083876 4. 0.6083876 L a 0.6 b 0.0083876/0.2=0.041938 5. 0.041938 _ a 0.0 b 0.041938/0.1=0.41938 6. 0.41938 G... 2014. ősz Óbudai Egyetem, NIK Dr. Kutor László IRA 8/25/13
Szótár alapú adattömörítés Gondolkodás nélkül tanulni haszontalanság, tanulás nélkül gondolkodni veszélyes Konfucius lap 1 2 3 4.. N sor 1 2 3 4 5 6 7 Gondolkodás nélkül tanulni A kód felépítése: lap bejegyzés lap bejegyzés.......... 2 4 3 6 4 2......... 2014. ősz Óbudai Egyetem, NIK Dr. Kutor László IRA 8/25/14
A szállodai éjjeliszekrény szokásos kellékei 2014. ősz Óbudai Egyetem, NIK Dr. Kutor László IRA 8/25/15
A szállodai éjjeliszekrény szokásos kelléke 2. 2014. ősz Óbudai Egyetem, NIK Dr. Kutor László
A szótár alapú adattömörítés blokkvázlata szótár szótár forrás csatorna vevő kódoló dekódoló 2014. ősz Óbudai Egyetem, NIK Dr. Kutor László IRA 8/25/17
A szótár alapú adattömörítés története 1977 Abraham Lempel és Jakob Ziv LZ77 An Unversal Algorithm for Sequntial Data Compression IEEE Transaction on Information Theory 1978 Abraham Lempel és Jakob Ziv LZ78 Compression of Individual Sequences via Variable-Rate Coding IEEE Transaction on Information Theory 1984 Terry Welch (Sperry Research Center) LZW A Technique for High-Performance Data Compression IEEE Computer 1984 June 2014. ősz Óbudai Egyetem, NIK Dr. Kutor László IRA 8/25/18
Az LZ 77 kódolás elve Abraham Lempel, Jakab Ziv 1977 szótár alapú, csúszó ablak tömörítés _for_(i=0_;i<max-1;i++)\r_for(=j+1;j <MAX;j++) \r Szöveg ablak ( szótár ),(4K-64K) Kódolandó szöveg ablak (16bájt-1K) A kódolandó karakter sorozatot egy kódhármassal helyettesítjük 13, 4, ; A kódolási lépés után az ablakok elcsúsznak _(i=0_;i<max-1;j++)\r_for(=j+1;j <MAX ;j++) \r_a(i 2014. ősz Óbudai Egyetem, NIK Dr. Kutor László IRA 8/25/19
Az LZ 77 kódolás korlátai LZ77 elvű tömörítő programok: PKZIP (PKWare) LHarc (H. Yoshizaki) ARJ (R. Jung) 1. Csak a kódolandó karaktersorozatot közvetlenül megelőző adatsoron belül (a szótárban ) tud keresni 2. Az egy kóddal lekódolható adat hossza korlátozott 2014. ősz Óbudai Egyetem, NIK Dr. Kutor László IRA 8/25/20
Az LZ78 adattömörítés jellemzői w Adaptív, szótár alapú kódolás w A szótárat lépésről-lépésre építi w A szótárba a soron következő sorszám mellé az a karakterfüzér kerül ami korábban még nem szerepelt LZ78 elvű tömörítők: UNIX compress ARC.ARC PKARC (DEC, VAX) (MS-DOS) (PKWare) 2014. ősz Óbudai Egyetem, NIK Dr. Kutor László IRA 8/25/21
Az adaptív kódolás jellemzői Lényege: a forrásból nyert információ alapján a kódot lépésről-lépésre, egyre hatékonyabban hozzuk létre kódoló dekódoló Statisztika vagy forrás előfordulási csatorna előfordulási vevő információ Statisztika vagy információ Előnye: a statisztikai információt nem kell továbbítani Hátránya: a vevő oldalon is létre kell hozni a statisztikát 2014. ősz Óbudai Egyetem, NIK Dr. Kutor László IRA 8/25/22
Példa az LZ78-as kódolásra Kódolandó szöveg: ABABABABABABABABABABA Szótár bejegyzés 1 A 2 B 3 AB 4 ABA 5 BA 6 BAB 7 ABAB 8 ABABA 0A 0B 1B 3A 2A 5B 4B 7A 2014. ősz Óbudai Egyetem, NIK Dr. Kutor László IRA 8/25/23
Az LZW adattömörítés folyamata STR=String Ch=karakter EOF= fájl vége Start Az első karakter az STR-be Ch olvasása EOF Igen STR kódjának kiírása Vége Igen STR+CH van a táblázatban? Nem STR kódja a kimenetre STR+Ch a táblázatba SRT := STR+Ch STR := Ch 2014. ősz Óbudai Egyetem, NIK Dr. Kutor László IRA 8/25/24
Kérdések: - Mi a Huffmann és Shannon-Fano kódja a következő karaktereknek ha az üzenetben előforduló karakterek és előfordulásaik száma a következő: A(16), B(8), C(7), D (6), E (5) - Hogyan számolható ki a következő karaktersorozat LZ78-as kódja: XYZXYZXYZXYZXYZXYZXYZXYZXYZXYZ 2014. ősz Óbudai Egyetem, NIK Dr. Kutor László IRA 8/25/25