Diszkrét matematika 2.C szakirány 207. tavasz. Diszkrét matematika 2.C szakirány 9. előadás Nagy Gábor nagygabr@gmail.com nagy@compalg.inf.elte.hu compalg.inf.elte.hu/ nagy Komputeralgebra Tanszék 207. tavasz
Kódolás Diszkrét matematika 2.C szakirány 207. tavasz 2. Betűnkénti kódolás Tétel (McMillan-egyenlőtlenség, NB) Legyen A = {a, a 2,..., a n } és B két ábécé, B elemeinek száma r 2, és ϕ : A B + injektív leképezés. Ha a ϕ által meghatározott betűnkénti kódolás felbontható, akkor l j = ϕ(a j ) jelöléssel n r l j. j= Tétel (McMillan-egyenlőtlenség,,megfordítása, NB) Az előző tétel jelöléseit használva, ha l, l 2,..., l n olyan pozitív egész számok, hogy n j= r l j, akkor van az A-nak a B elemeivel való olyan felbontható (sőt prefix) kódolása, hogy az a j betű kódjának hossza l j.
Kódolás Diszkrét matematika 2.C szakirány 207. tavasz 3. Betűnkénti kódolás Definíció Legyen A = {a, a 2,..., a n } a kódolandó ábécé, p, p 2,..., p n a betűk eloszlása, ϕ : A B + injektív leképezés, továbbá l j = ϕ(a j ). Ekkor l = n j= p jl j a kód átlagos szóhossza. Ha adott elemszámú ábécével és eloszlással egy felbontható betűnkénti kód átlagos szóhosszúsága minimális, akkor optimális kódnak nevezzük. Megjegyzés Az átlagos kódhossz valós szám, és valós számok halmazában nem feltétlenül van minimális elem (ld. { n n N}), ezért optimális kód létezése nem triviális.
Kódolás Diszkrét matematika 2.C szakirány 207. tavasz 4. Betűnkénti kódolás Álĺıtás Adott ábécé és eloszlás esetén létezik optimális kód. Bizonyítás Válasszunk egy tetszőleges felbontható kódot (Miért van ilyen?), ennek átlagos szóhosszúsága legyen l. Mivel p j l j > l esetén a kód nem lehet optimális (Miért?), ezért elég azokat a kódokat tekinteni, amelyekre l j l p j, ha j =, 2,..., n. Ilyen kód csak véges sok van, így van köztük minimális átlagos hosszúságú.
Kódolás Diszkrét matematika 2.C szakirány 207. tavasz 5. Betűnkénti kódolás Tétel (Shannon tétele zajmentes csatornára) Legyen A = {a, a 2,..., a n } a kódolandó ábécé, p, p 2,..., p n a betűk eloszlása, ϕ : A B + injektív leképezés, B elemeinek a száma r 2, továbbá l j = ϕ(a j ). Ha a ϕ által meghatározott betűnkénti kódolás felbontható, akkor H r (p, p 2,..., p n ) l. Bizonyítás = l H r (p, p 2,..., p n ) = n p j ( log r (r l j ) ) + j= n j= log r ( n j= n p j l j + j= ( p j log r p j r l j ) n p j log r p j = j= ) = n j= log r = 0 ( r l ) j p j log r p j
Kódolás Diszkrét matematika 2.C szakirány 207. tavasz 6. Betűnkénti kódolás Tétel (Shannon kód létezése) Az előző tétel jelöléseivel, ha n >, akkor van olyan prefix kód, amire l < H r (p, p 2,..., p n ) +. Bizonyítás Válasszunk olyan l, l 2,..., l n természetes számokat, amelyekre r l j p j < r l j +, ha j =, 2,..., n (Miért tudunk ilyeneket választani?). Ekkor n j= r l j n j= p j =, így a McMillan-egyenlőtlenség megfordítása miatt létezik prefix kód az adott l j hosszakkal. Mivel l j < log r p j (Miért?), ezért l = n p j l j < j= n p j ( log r p j ) = + H r (p, p 2,..., p n ). j=
Kódolás Diszkrét matematika 2.C szakirány 207. tavasz 7. Optimális kódkonstrukció: Huffman-kód Legyen {a, a 2,..., a n } az üzenetek halmaza, a hozzájuk tartozó eloszlás pedig {p, p 2,..., p n }, a kódábécé elemszáma r. Rendezzük relatív gyakoriság szerint csökkenő sorrendbe a betűket. Osszuk el maradékosan n 2-t r -gyel: n 2 = q(r ) + m 0 m < r, és legyen t = m + 2. Helyettesítsük az utolsó t betűt egy új betűvel, amihez az elhagyott betűk relatív gyakoriságainak összegét rendeljük, és az így kapott gyakoriságoknak megfelelően helyezzük el az új betűt a sorozatban. Ezek után ismételjük meg az előző redukciót, de most már minden lépésben r betűvel csökkentve a kódolandó halmazt, mígnem már csak r betű marad. Most a redukált ábécé legfeljebb r betűt tartalmaz, és ha volt redukció, akkor pontosan r-et. Ezeket a kódoló ábécé elemeivel kódoljuk, majd a redukciónak megfelelően visszafelé haladva, az összevont betűk kódját az összevonásként kapott betű már meglévő kódjának a kódoló ábécé különböző betűivel való kiegészítésével kapjuk.
Kódolás Diszkrét matematika 2.C szakirány 207. tavasz 8. Példa Huffman-kódra Legyen A = {a, b,..., j}, a relatív gyakoriságok 0, 7; 0, 02; 0, 3; 0, 02; 0, 0; 0, 3; 0, 02; 0, 7; 0, 06; 0, 09, a kódoló ábécé pedig {0,, 2}. 0 2 = 4 (3 ) + 0, így t = 0 + 2 = 2. f 0,3 a 0,7 h 0,7 c 0,3 j 0,09 i 0,06 b 0,02 d 0,02 g e 0,02 0,0 } 0, 03 f 0,3 a 0,7 h 0,7 c 0,3 j 0,09 i 0,06 (g,e) b d 0,03 0,02 0,02 0, 07 f 0,3 a 0,7 h 0,7 c 0,3 j ((g,e),b,d) i 0,09 0,07 0,06 0, 22 f 0,3 (j,((g,e),b,d),i) 0,22 a 0,7 h 0,7 c 0,3 0, 47 (a,h,c) 0,47 f 0,3 (j,((g,e),b,d),i) 0,22
Kódolás Diszkrét matematika 2.C szakirány 207. tavasz 9. Példa Huffman-kódra folyt. (a,h,c) 0,47 f 0,3 (j,((g,e),b,d),i) 0,22 Kódolás: (a,h,c) 0 f (j,((g,e),b,d),i) 2 Entrópia:, 73. Átlagos szóhossz:, 79. a 00 h 0 c 02 j 20 ((g,e),b,d) 2 (g,e) 20 g 200 e 20 b 2 d 22 i 22
Kódolás Diszkrét matematika 2.C szakirány 207. tavasz 0. Betűnkénti kódolás Tétel (NB) A Huffman-kód optimális. Példa Shannon-kódra Az előző példában használt ábécét és eloszlást fogjuk használni. Rendezzük sorba az ábécét relatív gyakoriságok szerinti csökkenő sorrendben: f 0,3 a 0,7 h 0,7 c 0,3 j 0,09 i 0,06 b 0,02 d 0,02 g 0,02 e 0,0
Kódolás Diszkrét matematika 2.C szakirány 207. tavasz. Példa Shannon-kódra folyt. Határozzuk meg a szükséges szóhosszúságokat: 9 0, 3; 0, 7; 0, 3 < 3, ezért f, a, h és c kódhossza 2. 27 0, 09; 0, 06 < 9, ezért j és i kódhossza 3. 8 0, 02 < 27, ezért b, d és g kódhossza 4. 243 0, 0 < 8, ezért e kódhossza 5. Az f kódja 00, az a kódja 0, a h kódja 02, és ez utóbbihoz -et adva hármas alapú számrendszerben kapjuk c kódját, ami 0. Ehhez -et adva -et kapunk, de j kódjának hossza 3, ezért ezt még ki kell egészíteni jobbról egy 0-val, tehát j kódja 0. Hasonlóan folytatva megkapjuk a teljes kódot: f 00 a 0 h 02 c 0 j 0 i b 20 d 2 g 22 e 2000 Átlagos szóhossz: 2, 3 <, 73 +.
Kódolás Diszkrét matematika 2.C szakirány 207. tavasz 2. Betűnkénti kódolás Kódfa A betűnkénti kódolás szemléltethető egy címkézett irányított fával. Legyen ϕ : A B egy betűnkénti kódolás, és tekintsük rng(ϕ) prefixeinek halmazát. Ez a halmaz részbenrendezett a,,prefixe relációra. Vegyük ennek a Hasse-diagramját. Így egy irányított fát kapunk, aminek a gyökere az üres szó, és minden szó a hosszának megfelelő szinten van. A fa éleit címkézzük úgy B elemeivel, hogy ha β = αb valamely b B-re, akkor az α-ból β-ba vezető él címkéje legyen b. A kódfa csúcsait is megcímkézhetjük: az a A kódjának megfelelő csúcs címkéje legyen a A; azon csúcs címkéje, amely nincsen rng(ϕ)-ben, legyen,,üres. Megjegyzés Az előbbi konstrukció meg is fordítható. Tekintsünk egy véges, élcímkézett irányított fát, ahol az élcímkék halmaza B, az egy csúcsból kiinduló élek mind különböző címkéjűek, továbbá az A véges ábécének a csúcsokra való leképezését, amelynél minden levél előáll képként. Az a A betű kódja legyen az a szó, amelyet úgy kapunk, hogy a gyökértől az a-nak megfelelő csúcsig haladó irányított út mentén összeolvassuk az élek címkéit.
Kódolás Diszkrét matematika 2.C szakirány 207. tavasz 3. Kódfa Példa 0 2 0 2 f 0 2 a h c j 0 2 i 0 b d g e A Huffman-kódos példában szereplő kódhoz tartozó kódfa. ϕ(a) =00, ϕ(b) =2, ϕ(c) =02, ϕ(d) =22, ϕ(e) =20, ϕ(f ) =, ϕ(g) =200, ϕ(h) =0, ϕ(i) =22, ϕ(j) =20. A kódszavak prefixeinek halmaza: {λ,, 00, 0, 0, 02, 20, 2, 22, 2, 2, 22, 200, 20, 20}
Kódolás Diszkrét matematika 2.C szakirány 207. tavasz 4. Kódfa Példa 0 0 2 0 2 f a h c 0 2 0 j i 0 2 0 b d g 0 e A Shannon-kódos példában szereplő kódhoz tartozó kódfa. ϕ(a) =0, ϕ(b) =20, ϕ(c) =0, ϕ(d) =2, ϕ(e) =2000, ϕ(f ) =00, ϕ(g) =22, ϕ(h) =02, ϕ(i) =, ϕ(j) =0. A kódszavak prefixeinek halmaza: {0, 0, λ, 20, 2,,, 0, 2, 2000, 200, 20, 2, 00, 22, 02,, 0}
Kódolás Diszkrét matematika 2.C szakirány 207. tavasz 5. Hibakorlátozó kódolás Példa (ISBN (International Standard Book Number) kódolása) Legyen d, d 2,..., d n decimális számjegyek egy sorozata (n 0). Egészítsük ki a sorozatot egy n + -edik számjeggyel, amelynek értéke d n+ = n j d j mod, j= ha az nem 0, különben d n+ legyen X. Ha valamelyik számjegyet eĺırjuk, akkor az összefüggés nem teljesülhet: d n+ eĺırása esetén ez nyilvánvaló, j n-re d j helyett d j -t írva pedig az összeg j(d j d j )-vel nőtt, ami nem lehet -gyel osztható (Miért?). Azt is észrevesszük, ha j < n esetén d j -t és d j+ -et felcseréljük: az összeg jd j+ + (j + )d j jd j (j + )d j+ = d j d j+ -gyel nő, ami csak akkor lehet -gyel osztható, ha d j = d j+. Megjegyzés 2007 óta 3 jegyű. A személyi számnál is használják.
Kódolás Diszkrét matematika 2.C szakirány 207. tavasz 6. Hibakorlátozó kódolás Példa (Paritásbites kód) Egy n hosszú 0- sorozatot egészítsünk ki egy n + -edik bittel, ami legyen, ha a sorozatban páratlan sok -es van, különben pedig legyen 0. Ha egy bit megváltozik, akkor észleljük a hibát. Példa (Kétdimenziós paritásellenőrzés) b 0,0 b 0,j b 0,n b 0,n.......... b i,0 b i,j b i,n b i,n.......... b m,0 b m,j b m,n b m,n b m,0 b m,j b m,n b m,n Oszlopok és sorok végén paritásbit. Ha megváltozik egy bit, akkor a sor és az oszlop végén jelez az ellenőrző bit, ez alapján tudjuk javítani a hibát. Ha két bit változik meg, akkor észleljük a hibát, de nem tudjuk javítani.
Kódolás Diszkrét matematika 2.C szakirány 207. tavasz 7. Hibakorlátozó kódolás Definíció Egy kód t-hibajelző, ha minden olyan esetben jelez, ha az elküldött és megkapott szó legfeljebb t helyen tér el. Egy kód pontosan t-hibajelző, ha t-hibajelző, de van olyan t + -hiba, amit nem jelez. Példa ISBN - -hibajelző paritásbites kód - -hibajelző kétdimenziós paritásellenőrzés - 2-hibajelző Hiba javításának módjai ARQ (Automatic Retransmission Request) - újraküldés, FEC (Forward Error Correction) - javítható, pl.: kétdimenziós paritásell.
Kódolás Diszkrét matematika 2.C szakirány 207. tavasz 8. Hibakorlátozó kódolás Definíció Legyen A véges ábécé, továbbá u, v A n. Ekkor u és v Hamming-távolsága alatt az azonos pozícióban lévő különböző betűk számát értjük: d(u, v) = {i : i n u i v i }. Példa 0 0 0 0 = d(00,00)=4 A L M A A N N A = = d(alma,anna)=2