Shannon és Huffman kód konstrukció tetszőleges. véges test felett

Hasonló dokumentumok
Informatikai Rendszerek Alapjai

A továbbiakban Y = {0, 1}, azaz minden szóhoz egy bináris sorozatot rendelünk

Az Informatika Elméleti Alapjai

Struktúra nélküli adatszerkezetek

Az Informatika Elméleti Alapjai

A 2017/2018 tanévi Országos Középiskolai Tanulmányi Verseny első fordulójának feladatai. INFORMATIKA II. (programozás) kategória

Diszkrét matematika 2.C szakirány

Diszkrét matematika 2.C szakirány

Mohó algoritmusok. Példa:

Algoritmuselmélet. 2-3 fák. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem. 8.

Információk. Ismétlés II. Ismétlés. Ismétlés III. A PROGRAMOZÁS ALAPJAI 2. Készítette: Vénné Meskó Katalin. Algoritmus. Algoritmus ábrázolása

H=0 H=1. Legyen m pozitív egészre {a 1, a 2,, a m } különböző üzenetek halmaza. Ha az a i üzenetet k i -szer fordul elő az adásban,

Bevezetés a matematikába (2009. ősz) 1. röpdolgozat

Adatszerkezetek I. 7. előadás. (Horváth Gyula anyagai felhasználásával)

Adatszerkezetek II. 10. előadás

Az Informatika Elméleti Alapjai

A 2016/2017 tanévi Országos Középiskolai Tanulmányi Verseny első forduló javítási-értékelési útmutató. INFORMATIKA II. (programozás) kategória

Nagy Gábor compalg.inf.elte.hu/ nagy

Adatszerkezetek. Nevezetes algoritmusok (Keresések, rendezések)

Algoritmuselmélet 6. előadás

A számítástudomány alapjai. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem

Nagy Gábor compalg.inf.elte.hu/ nagy

Sorozatok határértéke SOROZAT FOGALMA, MEGADÁSA, ÁBRÁZOLÁSA; KORLÁTOS ÉS MONOTON SOROZATOK

A számok kiírása is alapvetően karakterek kiírásán alapul, azonban figyelembe kell venni, hogy a számjegyeket, mint karaktereket kell kiírni.

Algoritmuselmélet 2. előadás

Kombinatorikai algoritmusok. (Horváth Gyula és Szlávi Péter előadásai felhasználásával)

Adatszerkezetek 2. Dr. Iványi Péter

Kombinatorikai algoritmusok

Rekurzió. Dr. Iványi Péter

Gyakori elemhalmazok kinyerése

INFORMATIKA javítókulcs 2016

Programozás alapjai 9. előadás. Wagner György Általános Informatikai Tanszék

EGYSZERŰ, NEM IRÁNYÍTOTT (IRÁNYÍTATLAN) GRÁF

Véges állapotú gépek (FSM) tervezése

Informatikai Rendszerek Alapjai

Nagy Gábor compalg.inf.elte.hu/ nagy

Alkalmazott modul: Programozás

Algoritmusok és adatszerkezetek gyakorlat 07

Hibajavító kódok május 31. Hibajavító kódok 1. 1

Adatszerkezetek Adatszerkezet fogalma. Az értékhalmaz struktúrája

Kedves Diákok! A feladatok legtöbbször egy pontot érnek. Ahol ettől eltérés van, azt külön jelöljük.

5. foglalkozás. Húsz találgatás Információelmélet

1. Számoljuk meg egy számokat tartalmazó mátrixban a nulla elemeket!

Diszkrét matematika 2.

Láncolt listák Témakörök. Lista alapfogalmak

ELEMI PROGRAMOZÁSI TÉTELEK

Komputeralgebra Rendszerek

KOVÁCS BÉLA, MATEMATIKA I.

1. Három tanuló reggel az iskola bejáratánál hányféle sorrendben lépheti át a küszöböt?

Zárthelyi dolgozat feladatainak megoldása õsz

Rendezések. Összehasonlító rendezések

1. Feladat: beolvas két számot úgy, hogy a-ba kerüljön a nagyobb

Sorozatok I. Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma)

Alapfogalmak a Diszkrét matematika II. tárgyból

Adatszerkezetek I. 8. előadás. (Horváth Gyula anyagai felhasználásával)

Megoldás Digitális technika I. (vimia102) 4. gyakorlat: Sorrendi hálózatok alapjai, állapot gráf, állapottábla

Fájlszervezés. Adatbázisok tervezése, megvalósítása és menedzselése

Bevezetés a programozásba I.

10. előadás Speciális többágú fák

A 2015/2016 tanévi Országos Középiskolai Tanulmányi Verseny első forduló javítási-értékelési útmutató. INFORMATIKA II. (programozás) kategória

Diszkrét matematika 2.C szakirány

Információs rendszerek elméleti alapjai. Információelmélet

Hibajavító kódolás (előadásvázlat, november 14.) Maróti Miklós

8. Mohó algoritmusok Egy esemény-kiválasztási probléma. Az esemény-kiválasztási probléma optimális részproblémák szerkezete

Véges állapotú gépek (FSM) tervezése

Felvételi tematika INFORMATIKA

Bevezetés a programozásba. 5. Előadás: Tömbök

[Biomatematika 2] Orvosi biometria

Rekurzív algoritmusok

ADATBÁZISOK gyakorlat: SQL 2. rész SELECT

Számítógépes Hálózatok. 5. gyakorlat

Spike Trade napló_1.1 használati útmutató

Algoritmusok bonyolultsága

1. előadás. Lineáris algebra numerikus módszerei. Hibaszámítás Számábrázolás Kerekítés, levágás Klasszikus hibaanalízis Abszolút hiba Relatív hiba

13. Egy x és egy y hosszúságú sorozat konvolúciójának hossza a. x-y-1 b. x-y c. x+y d. x+y+1 e. egyik sem

Keresés és rendezés. A programozás alapjai I. Hálózati Rendszerek és Szolgáltatások Tanszék Farkas Balázs, Fiala Péter, Vitéz András, Zsóka Zoltán

III. Gráfok. 1. Irányítatlan gráfok:

4. A kézfogások száma pont Összesen: 2 pont

Adatszerkezetek II. 1. előadás

Biomatematika 2 Orvosi biometria

Algoritmuselmélet 7. előadás

15. A VERSENYRENDEZÉS

Kupac adatszerkezet. A[i] bal fia A[2i] A[i] jobb fia A[2i + 1]

A számítógépes nyelvészet elmélete és gyakorlata. Formális nyelvek elmélete

Az egyenes egyenlete: 2 pont. Az összevont alak: 1 pont. Melyik ábrán látható e függvény grafikonjának egy részlete?

2018, Diszkrét matematika

Lineáris algebra I. Vektorok és szorzataik

KÓDOLÁSTECHNIKA PZH december 18.

Bevezetés a számítástechnikába

Multihalmaz, intervallumhalmaz

Algoritmizálás és adatmodellezés tanítása 9. előadás

Diszkrét matematika 2.

Rendezések. A rendezési probléma: Bemenet: Kimenet: n számot tartalmazó (a 1,a 2,,a n ) sorozat

Adatbázis és szoftverfejlesztés elmélet. Programozási tételek

Gráfelmélet. I. Előadás jegyzet (2010.szeptember 9.) 1.A gráf fogalma

0-49 pont: elégtelen, pont: elégséges, pont: közepes, pont: jó, pont: jeles

Algoritmusok és adatszerkezetek I. 1. előadás

X. ANALÓG JELEK ILLESZTÉSE DIGITÁLIS ESZKÖZÖKHÖZ

Visszalépéses kiválogatás

32. A Knuth-Morris-Pratt algoritmus

Átírás:

1 Shannon és Huffman kód konstrukció tetszőleges véges test felett Mire is jók ezek a kódolások? A szabványos karakterkódolások (pl. UTF-8, ISO-8859 ) általában 8 biten tárolnak egy-egy karaktert. Ha tudjuk, hogy a szövegben melyet át akarunk küldeni valahova nem használjuk fel az összes létező karaktert, akkor egy új fajta kódolással, amely csak azokra a karakterekre vonatkoznak melyek üzenetünkben állnak, lecsökkenthetjük a küldendő kódunk hosszát. Ezeket változóhosszú kódolásoknak is szoktuk nevezni hiszen egy-egy karakterkód hosszúsága nem feltétlen egyezik meg. A kódolások elméleti háttere Egy ilyen kódolási módot dolgozott ki Claude Shannon és Robert Fano. Módszerük röviden, érthetően leírva: a szövegben lévő karakterek előfordulása alapján sorrendbe állítjuk majd ezt a listát két részre osztjuk úgy hogy a két részben lévő előfordulások összege közel azonos legyen. Majd az így kapott részekre újra megismételjük ezt, amíg már csak egy tagú részhalmazok nem maradnak. A művelet után egy bináris fát kapunk, ennek éleit rendre elnevezzük úgy, hogy a bal élek 0-ás, míg a jobb élek az 1-es számot kapják. Így megkapjuk az úgynevezett kódfát. Egy karakter kódját pedig megkapjuk, ha a gyökértől az odavezető élek nevét leírjuk jó sorrendbe. (A példában tehát az D-nek a kódja 110) Példa:

2 Egy másikfajta módszer megalkotója, ugyancsak erre a problémára David A. Huffman. Ő is a karakterek előfordulását vizsgálta először és ugyancsak egy bináris kódfát épít fel a következő módon: Kiválasztjuk a sorozat két legkisebb gyakoriságú elemét, amely egy háromcsúcsú bináris fa két levele lesz (amelyeket a gyakorisággal címkézzük meg), majd ezekhez hozzárendelünk egy gyökeret, amelyet a két gyakoriság összegével címkézünk meg. Ezután a két vizsgált elemet kitöröljük a sorozatból, és azok összegét beszúrjuk az érték szerinti megfelelő helyre. Ezután folytatjuk az előző műveletet mindaddig, amíg van elem a sorozatban. A fa éleit a már a Shannon módszernél leírtak szerint elnevezzük és a karaktereket is hasonló módon látjuk el a megfelelő kódjaikkal. Példa:

3 Kódolások megvalósítása Maple illetve Sage-ben Maple Párhuzamosan fogunk haladni, a kétfajta kódolással mivel teljesen megegyezik a két módszer a bináris fafelépítést eltekintve. 1. lépés: A szöveg betűinek megszámlálása Erre tökéletes a StringTools csomagban lévő CharacterFrequencies() függvény. Azonban ez még nem állítja növekvő sorrendbe (egyszerűen csak berakjuk őket egy halmazba) illetve később majd úgy kell nekünk hogy a darabszám legyen elől és utána a karakter. Erre szolgál a Freq() függvény. 2. lépés: A bináris fák előállítása listás ábrázolással Shannon-fa: Tulajdonképpen az lett lekódolva amit fent szabadabban megfogalmaztunk. n- ben tároljuk azt hogy hány karakter van a listánkban, split azt mutatja meg hanyadik karakternél kell szétválasztani két részre a listát, cumul-al pedig azt számoljuk hogy a két részhalmazban az előfordulások összege közel azonos legyen, mindezt egy ciklus segítségével. Majd rekurzívan meghívjuk, a kiszámolt helyen szétválasztva, önmagát, úgy hogy külön listába kerüljenek a szétválasztott részek. (persze az egész egy nagy lista marad)

4 Huffman-fa: Ugyancsak a fentiekben már leírt módon dolgozunk itt is. Meghívjuk rekurzív módon önmagát, úgy hogy az első két elem már ne legyen benne, hisz annak az összegét uniózzuk hozzá (kihasználva, hogy halmaz típust hoz létre a Freq() függvényünk). Tehát kialakult a két bináris fánk: 3.lépés: Karakter kódjainak generálása Ugyancsak rekúrzív módon dolgozunk itt is úgy, hogy a párokba rendezett listában a pár első eleméhez 0-t a másodikhoz 1-et rendel. 4.lépés: A szöveg és a karakterkódok egyeztetése Erre tökéletesen alkalmas az ugyancsak a StringTools csomagból az Explode() függvény ezt minden tábla-béli elemre meghívva és a cat() függvény segítségbevételével egy egész számsorrá gyúrhatjuk a szöveget:

5 Láthatjuk, hogy a Huffman kódolás jóval hatékonyabb. Ha már itt tartunk számoljuk ki mennyi bitet spóroltunk a kódolásokkal. Az eredeti szöveg 66 karaktert tartalmaz ez szabályos kódolással 528 bit, Shannon kódunk hossza: 413 Huffman kódunké: 251 tehát spóroltunk 115 illetve 277(!) bitet egyetlen mondat lekódolásával. 5.lépés: Dekódolás Dekódoláshoz létrehozunk egy segédvektort, ami olyan hosszú, mint a dekódolandó szöveg ebbe a vektorba írjuk bele egyesével a megfelelő betüket a megfelelő helyre úgy hogy a kódfában haladunk mindig a megfelelő irányba.a végén a StringTools csomagból az Implode() függvény ad segítséget arra hogy egy egész szöveg legyen a vektorból. Példa egy betű menetének megtalálása:

6 Sage Sage-ben könnyebb dolgunk van, hiszen a Huffman-kódolost ott már implementálták sage.coding.source_coding.huffman osztályból elérhetjük.