140 likes | 240 Views
Készítette : Mester Tamás METRABI.ELTE. Adattömörítés Huffmann-kód. A tömörítés célja általában. Egy bemeneten kapott szöveg(karakter sorozat) méretét csökkenteni, minél kisebb méretűre minél hatékonyabb algoritmussal.
E N D
Készítette: MesterTamás METRABI.ELTE AdattömörítésHuffmann-kód
A tömörítés célja általában • 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.
A Huffmann-kód alapelve • 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.
Cél • 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 1010. 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!
Követelmény • 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 ADS szinten • 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!
Szemléletesen 1. input: K-5, A-5, U-1, M-2, D-1, R-1, N-1 5 1 5 1 1 1 2 A N K U D R M
Szemléletesen 2. 2 1 0 5 1 5 1 1 1 2 A N K U D R M
Szemléletesen 3. 2 2 1 1 0 0 5 1 5 1 1 2 1 A N K D R M U
Szemléletesen 4. 4 1 0 2 2 1 1 0 0 5 1 5 1 1 2 1 A N K D R M U
Szemléletesen 5. 6 1 4 1 0 0 2 2 10 1 1 0 1 0 0 1 1 1 5 2 1 5 N D R K M U A
Szemléletesen 6. 16 1 6 1 0 4 1 0 0 2 2 10 1 1 0 1 0 0 1 1 1 5 2 1 5 N D R K M U A
Az algoritmus eredménye • Karakterek kódtáblája: • Kódolt karaktersorozat hossza:5*2+5*2+2*2+4*4 = 40 bit, ami jobb, mint az eredeti 48 bit!