Mukautuva Huffman-koodaus (kutsutaan myös dynaamiseksi Huffman-koodaukseksi ) on Huffman -koodaukseen perustuva adaptiivinen menetelmä . Sen avulla voit rakentaa koodikaavion suoratoistotilassa (ilman alustavaa tietojen skannausta) ilman alkuperäisen jakelun alkutietoa, mikä mahdollistaa tietojen pakkaamisen yhdellä kertaa. Tämän menetelmän etuna on kyky koodata lennossa.
Tälle menetelmälle on useita toteutuksia, joista merkittävimmät ovat "FGK" (FGK: Voller, Gallagher ja Knuth ) ja Witterin algoritmi.
Sen avulla voit säätää Huffman-puuta dynaamisesti ilman alkutaajuuksia. FGD Huffman -puussa on erityinen ulompi solmu, nimeltään 0-solmu , jota käytetään saapuvien merkkien tunnistamiseen. Toisin sanoen aina kun uusi merkki kohdataan, sen polku puussa alkaa nollasolmusta. Tärkeintä on, että sinun on tarvittaessa katkaistava ja tasapainotettava FGD Huffman -puu ja päivitettävä siihen liittyvien solmujen taajuus. Symbolin taajuuden kasvaessa myös sen kaikkien vanhempien taajuutta on lisättävä. Tämä saavutetaan solmujen, alipuiden tai molempien peräkkäisellä permutaatiolla.
FGD-puun tärkeä ominaisuus on veljeys (tai kilpailu) -periaate: jokaisella solmulla on kaksi lasta (solmuja ilman lapsia kutsutaan lehtiksi) ja painot ovat laskevassa järjestyksessä. Tämän ominaisuuden ansiosta puu voidaan tallentaa tavalliseen taulukkoon, mikä lisää suorituskykyä. [1] [2]
Koodi esitetään puurakenteena, jossa jokaisella solmulla on paino ja yksilöllinen numero.
Numerot laskevat ja oikealta vasemmalle.
Painojen on täytettävä veljeyden periaate. Siten, jos A on B:n vanhempi ja C on B:n lapsi, niin .
Paino on vain tähän mennessä havaittujen merkkien määrä.
Joukko solmuja, joilla on sama paino, on lohko .
Saadaksemme koodin jokaiselle solmulle binääripuun tapauksessa voisimme yksinkertaisesti kulkea kaikki polut juuresta solmuun kirjoittamalla esimerkiksi "1", jos menemme oikealle, ja "0", jos menemme mene vasemmalle.
Tämä algoritmi käyttää myös erityistä lehteä (solmu ilman jälkeläisiä), NYT (englanniksi ei vielä lähetetty - ei vielä lähetetty merkki), josta "kasvaa" uusia, ennen näkemättömiä merkkejä.
Enkooderi ja dekooderi alkavat vain juurisolmusta, jolla on suurin paino. Alussa tämä on NYT-solmumme.
Kun välitämme NYT-merkin, meidän on ensin välitettävä itse solmun koodi ja sitten tiedot.
Jokaiselle puussa jo olevalle symbolille meidän on välitettävä vain päätesolmujen (lehtien) koodi.
Jokaiselle lähetetylle merkille lähetin ja vastaanotin suorittavat päivitystoimenpiteen:
Huomautus: Solmujen vaihtaminen tarkoittaa painojen ja vastaavien symbolien, ei numeroiden, korvaamista.
Esimerkki
Aloitamme tyhjästä puusta.
" A" :lle välitämme sen binaarikoodin.
NYT synnyttää kaksi lapsisolmua: 254 ja 255. Lisää juuren painoa. Solmuun 255 liittyvästä "a"-koodista tulee 1 .
Lähetä "b": lle 0 (solmun NYT-koodi), sitten sen binaarikoodi.
NYT synnyttää kaksi lasta: 252 NYT ja 253 b . Lisäämme painoja 253, 254 ja juuria. "b" :n koodi on 01.
Seuraavaksi "b" lähetetään 01.
Siirrymme arkkiin 253. Meillä on painolohko 1:ssä ja suurin luku lohkossa 255, joten muutamme solmujen 253 ja 255 painoja ja symboleja, lisäämme painoa, siirrymme juureen ja lisäämme juuren painoa.
Jatkossa "b":n koodi on 1, ja "a":n koodi on nyt 01, mikä kuvastaa niiden taajuutta.
Puristusmenetelmät _ | |||||||
---|---|---|---|---|---|---|---|
Teoria |
| ||||||
Häviötön |
| ||||||
Audio |
| ||||||
Kuvat |
| ||||||
Video |
|