Készítette: Mester Tamás METRABI.ELTE
Egy bemeneten kapott szöveg(karakter sorozat) méretét csökkenteni, minél kisebb méretűre minél hatékonyabb algoritmussal. Különböző tömörítési eljárások ugyanazon bemeneten különböző méreteket eredményezhetnek.
Adott egy ábécé és egy ezen ábécé feletti szöveg. Példa input KAKUKKMADARAMNAK ábécé: {K, A, U, M, D, R, N} Az algoritmus alapelve: Karakterek változó kódhossza, a szövegbeli gyakoriságuknak megfelelően. Pl.: ‚e’ vs. ‚w’ ; ebben az esetben az ‚e’ betű egy gyakori betű, míg a ‚w’ ritka. Ennek megfelelően az ‚e’ betűnek egy rövid kódhosszat kell választani, míg a ‚w’ kódja lehet hosszabb.
Egy olyan algoritmus a kód előállítására, hogy az eredmény optimális legyen, azaz optimális legrövidebb kódolást alkotó algoritmust adjunk. A példában 7 karakter szerepel, uniform módon (3 biten ) kódoljuk őket. 16 karakter * 3 bit = 48 bit, ezen kellene javítani Alapvető nehézség lenne a kódolt szöveg visszafejtésében a következő. Tfh.: K 10, A 101 és a kódolt szöveg Ebben az esetben nem lenne visszakódolható a szöveg, ezért ne engedjük meg azt,hogy egyik betű kódja a másik valódi prefixuma legyen!
Egy prefixmentes-kód Ha minden karaktert ábrázolunk, akkor megkapjuk a kódfát. Ebben a fában minden belső pontnak 2 gyereke van. A betűk a leveleken jelentkeznek, kódjuk a gyökér -> levél útvonal 0/1 szelektorainak sorozata.
Az algoritmus inputja: betűk és gyakoriságaik (tehát először kell egy végigolvasás a statisztika elkészítéséhez) Az algoritmus egy fát épít fel alulról-felfelé, kezdve a ritka betűkkel (karakterekkel) fokozatosan bekapcsolva a gyakoribbakat. Minden lépésben két csúcsot „fogunk össze”, a két gyakoriság összegével. Miután végeztük a Huffmann-kód tábláját is átkell adni a dekódoló félnek!
N 1 R 1 D 1 U 1 M 2 K 5 A 5 input: K-5, A-5, U-1, M-2, D-1, R-1, N-1
N 1 R 1 D 1 U 1 M 2 K 5 A
N 1 R 1 D 1 U 1 M 2 K 5 A
N 1 R 1 D 1 U 1 M 2 K 5 A
N 1 R 1 D 1 U 1 M K 5 A
N 1 R 1 D 1 U 1 M K 5 A
Karakterek kódtáblája: KarakterKarakter kódja A00 K01 M10 U1100 D1101 R1110 N1111 Kódolt karaktersorozat hossza: 5*2+5*2+2*2+4*4 = 40 bit, ami jobb, mint az eredeti 48 bit!