Egy Texasi kiskocsmaban, Billie-nek a konyvelonek van egy gepe amin vannak billentyuk (0, …, 9, space) amin le kell konyvelnie, hogy melyik ugyfel mennyit fizetett.

Kitor egy lovoldozes a kiskocsmaban es kilovik Billienek az egyik billentyujet. Na de most hogyan konyveljen Billie.
Megoldas: Egy kisebb szamrendszerben konyvel es a kimarado billentyu jatsza majd a szerepet a kilott billentyunek.

Folytatodik a sztori es sorba lovik ki a tobbi billentyut is. Egeszen addig ameddig csak a 0, 1, 2 billentyuk maradnak.

Kilovik a 2-es billentyut is. Mostmar csak 0 es 1-es billentyuk vannak.

  • Leir annyi 1-est amennyit fizettek es a 0-as lesz a valaszto karakter.
  • mapping: {0: 00, 1: 11, 2: 01} es igy csinalja ugyanazt amit csinalt 3 szamjeggyel

Kilovik az 1-es billentyut is :’(

  • kodolja el az egyik elozo kodolasban es irjon le annyi 0-ast amekkora az a szam volt

Tegyuk fel, hogy a fizetesek: ezekbol letrehozza a szamot es ezt kodolja

Kovetkezo feladat



tehat van egy bites szamunk ahol darab -es van es ezt szeretnenk lekodolni

Elso eset: fixek/rogzitettek, ekkor eleg bit mivel helyen lehet a darab -es es ezeket kell csak kodolni

Masodik eset: nem ismerjuk egyiket sem
Ekkor le kell eloszor kodolni az -et utana le kell kodolnunk a -t utana -t
igy ugy fog kinezni, hogy kodolva ‘vesszo’ kodolva ‘vesszo’ utolso tag kodolva
a vesszoket el lehet hagyni ha a fenti mappinget hasznaljuk (az utolso tagot nem kell duplazni, mert ott mar nincsen vesszo)
igy fog kijonni a , ,

ugyesebb megoldas:
(elso bit kodolja az kodolosanak a hosszat), (), ( bit kodolja a kodolajanak a hosszat), (), ( kodolva)

osszesen:

legyen ()
ebben az esetben a fenti (‘osszesen’)

Legyen

Def.: A kovetkezo mennyiseget a eloszlas entropiajanak nevezzuk:

Megj.: Valamilyen ertelemben ha egy bitosorozatnak kicsi az entropiaja akkor azt jol lehet kodolni.

All.: Ha rogzitett, akkor a a legnagyobb az eloszlason es itt

Tegyuk fol, hogy van egy alapu ABC, tehat relativ gyakorisag

Tetel: elkodolhato bittel.

Informacioelmeleti also korlat
kulonbozo dolog elkodolasakor (injektiven) letezik egy olyan kod, ami bit
Mivel

Grafok kodolasa

  1. Tegyuk fel, hogy ismert, tovabba, hogy egyszeru es iranyitatlan a graf. Ekkor bittel el lehet kodolni (az adjecencia matrix felso haromszoge).
  2. Tegyuk fel, hogy ebbol nagyjabol az kovetkezik, hogy
    • Ha ismert, akkor a fentit ki tudjuk szamolni es igy el tudjuk kodolni darab kodolossal ami megmondja, hogy az .-edik el melyik ket csucsot koti ossze.
    • Ha nem ismert, akkor es bittel kodoljuk a -t es utana az elozo szerint kodolunk. Igy bit eleg.

Huffman

A Huffman kod egy betukod, tehat az ABC minden betujehez hozzarendel egy kodot, invjektiven.
inkektiv

Azt szeretnenk hogy a gyakori betuknek legyen rovidebb a kodja, mint azoknak a betuknek amiket alig hasznalunk.

Def.: kod prefix mentes, ha barhogy veszek ket kukonbozo betut akkor nem prefixe -nek. Tehat nem ugy kezdodik, hogy .

Szotar: gyokeres binaris fa es helyenkent vannak levelei. A levelekhez hozzarendelem az ABC elemeit.

Huffman kod:
, betu gyakorisaga tehat darab van -bol a szovegben

Kodolo algoritmus:

  1. Letrehozunk darab levelet, amik reprezentaljak az darab betut. Minden levelre rairjuk az elofordulasaik szamat, -t.
  2. Osszevonunk ketto gyokeret, melyeknek a szama a legkisebb. Igy az uj letrehozott gyokernek a szama a ketto masik osszege lesz.
  3. Iteraljuk a masodik lepest ameddig tudjuk, tehat mar csak egy gyoker van es osszefuggo a fa.

Miutan letrehoztuk a huffman fat, elnevezzuk a balra nezo agakat -nak es a jobbra nezo agakat -nek. Igy egy betu kodja a gyokerbol a hozzatartozo levelbe mutato ut lesz, nullasokkal es egyesekkel reprezentalva.

Tetel: A Huffman kod hossza minimalis a prefixmentes betukodok kozott

pelda:
A kovetkezo Huffman faban az u betunek a kodja a kovetkezo