InfElmTetel9

A VIK Wikiből

Ez az oldal a korábbi SCH wikiről lett áthozva.

Ha úgy érzed, hogy bármilyen formázási vagy tartalmi probléma van vele, akkor, kérlek, javíts rajta egy rövid szerkesztéssel!

Ha nem tudod, hogyan indulj el, olvasd el a migrálási útmutatót.


vissza InfelmTetelek-hez <style> li {margin-top: 4px; margin-bottom: 4px;} </style>

Shannon-Fano kód

Szeretnénk kódolni egy valószínűségi változót, amelynek eloszlása a következő. (Ha a következő nem teljesül, átindexeljük.)

Feltesszük, hogy .

az (i-1) legnagyobb valószínűségű érték valószínűségeinek összege, amire a kódoláshoz szükségünk lesz.
Legyen


ahol .

Felírjuk számokat -alapú számrendszerben, a -hez tartozó törtet olyan pontosságig, ahol először különbözik a többi , felírástól. Az így kapott db véges hosszú törtből elhagyjuk az egészrészt, ez lesz . Az így kapott kód prefix, és

Látható, hogy minden kódolásnál kevesebb mint egy kódbetű "veszik el", ezért célszerű minél nagyobb blokkméretet használni. A blokkméret növelésével az átlagos kódszóhosszra vonatkozó alsó határ tetszőlegesen megközelíthető. -- Sales - 2006.06.23.

TODO: ez nem bizonyítás! Én nem is fogom ideírni:) TK-ban megvan illetve: jogvédett, de elektronikus formában elérhető anyag
Algoritmus másképpen, ahogy digitből is tanultuk és ahogy könyebb elképzelni:

  • 0/1 kiegészítgetés*:
    A Shannon-Fano kód konstruálása során fát építhetünk(Legyen bináris a fa; s = 2). A valószínűségeken rendezés adott, ahogy a Shannon-kódnál. A rendezett sorozatot kétfelé vágjuk, hogy a két rész összsúlya(valószínűségek összege) a lehető legközelebb legyen egymáshoz. A két szakaszt jelezzük 0-val illetve 1-el a fa két új csúcsában(a gyökér alá téve ezeket) ami a sorozatot reprezentálja ezek után. Ez rekurzívan (a sorozat szétbontása a sorozathoz tartozó csúcs alá kerül, mint új gyökér alá) amíg egy elemű sorozatokat kapunk. A kódszavakat kiolvashatjuk, ha a gyökértől a levélekig bejárjuk az utakat, és kiolvassuk a csúcsokba írt számot(0/1).

-- hippi - 2007.06.13.