tömörítési algoritmusok nélkül adatvesztést

Szöveg tömörítési módszerek meglehetősen hosszú története van. Középpontjában egy ilyen adat tömörítési algoritmus azon az elven alapul, hogy minimalizálja a redundancia. A alaptétele Shannon kódoló forrás azt mondta, hogy a kódoló költsége mindig legalább egy forrás entrópia, bár lehet, hogy akármilyen közel is [1]. Ez a nyilatkozat meghatározza az elméleti határait tömörítés.

Ez használ az alapkoncepciója az elméleti információk - entrópia. amely informálisan intézkedésnek tekinthető az információ mennyiségét az üzenetben. Az költsége kódoló értetődő az átlagos kódszó hossza (bitekben) per egy szimbólumot a forrás szöveget. Ezután redundancia kódolás megegyezik az értéke közötti különbség az entrópia kódolás és az eredeti üzenetet alapján egy karaktert.

Gyakorlati érdekesek egymenetes kódolási algoritmust, tömörítés nem csak közvetlen hozzáférést fájlt, és patak. azaz fájl, amely nem teszi lehetővé a helymeghatározás és visszacsévélés.

Coding (kódolás) foglalkozik a szimbólum folyamot egy ábécé, előfordulási gyakorisága a különböző karaktereket. A cél az átalakulás kódoló egy szimbólum áramot a bitfolyamban egy minimális hossz. Ezt úgy érjük el, csökken a kimeneti áramlási redundancia figyelembevételével az előfordulási gyakorisága szimbólumok a bemeneti: a kód hossza legyen arányos a szereplő információk a bemeneti adatfolyam.

Ha a karakter frekvencia eloszlása ​​ismert, akkor tudjuk építeni az optimális kódolás. A feladat bonyolult, ha a rendszer nem ismertek. Ebben az esetben két különböző megközelítéseket.

A második megközelítés. használja adaptív kódoló (adaptív kódoló). Az ötlet az, hogy módosítsa a kódolási rendszert függően a bemeneti adatokat. Egy ilyen egymenetes algoritmus, és nem igényel az információ továbbítása a használt kódolási kifejezetten. Ehelyett a dekóder által olvasott kódolt adatfolyam szinkronban jeladó megváltoztatja a kódolási rendszert, kezdve egy bizonyos előre meghatározott. Alkalmazkodó kódoló ad nagyobb fokú tömörítés, a helyi frekvencia változásokat is figyelembe kell venni. Ennek egyik példája a dinamikus Huffman kódolást.

Statikus Huffman-kódolás térképek, a bemeneti szimbólum bitek képviselik láncok azonos hosszúságú (például 8-bites byte), egy változó hosszúságú karakterlánc bitek. kódhosszúság arányos a szimbólum (egész számra kerekített érték) kettes alapú logaritmusának gyakorisága hozott negatív előjellel. Ez a kódolás egy előtagot. így könnyen dekódolni egymenetes algoritmus. Az előtag kód bármely karakter kódolás a előtagot bármely más kódjelölés. Előhívó célszerűen egy bináris fa, ahol a karakterek vannak a levelek, és ívek jelzett 0 vagy 1. Ezután a karakter kód lehet beállítani, mint egy utat a gyökértől a levél tartalmazza, hogy a karakter.

3. példa Tekintsük végrehajtásának módja Huffman-kódolás az alábbi szöveggel:

EZ egy egyszerű példa a Huffman-kódolás.

1. kiszámítja az ismétlések számát minden betű az ábécé a forráskód:

3. Egy fa kezdődik a jobb szélső karakter a listában. A frekvenciákat a két legritkább karakter Összefoglalva, és írd az eredményt a csomópontja, ábrán látható. 1. Kezdeti frekvencia most a gyerekek az új összeg frekvencia. Ha több, mint két karakter egy minimális gyakorisága az ismétlések, akkor csak meg kell, hogy egy külön ketten. Ha vannak páratlan számú érték a legkisebb frekvencia értékét egyesíti párosítatlan következő legalacsonyabb frekvencia.


Ahogy tovább a folyamat építése a fa gyerekek unokák, dédunokák - és így tovább, amíg az egész fa befejeződött. A teljes összeget az eredeti szöveg karakter fogja képviselni a tetején a kapott fa. Így lehetőség van arra, hogy végezzen hatékony helyességének ellenőrzését, az építőiparban a fa kódolás.

4. A végleges Huffman kódot minden szimbólum a forráskód állíthatjuk elő úgy, hogy minden ága a fa meghatározott bináris attribútum. Minden maradt az ágak származó összes csomópont lesz jelölve 1, és minden a megfelelő ág - 0. Tehát a kód minden betű úgy állíthatjuk elő, mozog a fa ágain a tetején egy motivációs levelet és a felvételi sorrendjét bináris ágak attribútumok. Az eredményeket az alábbi táblázat foglalja össze, amelyeket használni fognak, mint a „szótár” a kódolás és az azt követő rekonstrukció az eredeti szöveg:

A kapott kódkönyv

Például, a szó ez a szekvencia által kódolt 00010 0110 1100 0111. A teljes hossza a kódszavak ezáltal csökken a 32 bit 17 bit. Minden pályamű képarányú 175/352 „0,497.

A tömörítés veszteségmentes grafikus információ talált alkalmazást futtatni hosszúságú kódoló eljárás RLE (Run Length Encoding), amelynek lényege abban rejlik, hogy a tömörített képfájl „húzta” egy lánc bájt raszter vonalak. Szükségtelen RLE tömörítés miatt előfordul, hogy az a tény, hogy az eredeti kép találhatók lánc azonos byte. Helyettük egy pár <счетчик повторений, значение> csökkenti adatredundanciát.

Például, a szekvencia „AAAAAAA” segítségével RLE algoritmus szerint kell kódolni „(A, 7)”.

Ebben az algoritmusban a számláló jelzi az egységek a két bitje az olvasási fájlt. Ennek megfelelően, a maradék 6 bitet töltött egy számláló, amely értékeket vehet 1-től 64. Az ismétlődő karakterlánc bájtok 64, fordulunk két bájt, azaz tömöríteni 32 alkalommal.

Ez az algoritmus végrehajtása a PCX formátum.

Van egy másik változata az algoritmust, amely megvalósítja az eljárás RLE, amely nagyobb tömörítési arány. A jel ismételje az algoritmus az egységet a legjelentősebb számjegy a megfelelő byte. Amint könnyen kiszámítható a legjobb esetben ez az algoritmus tömöríti kép 64-szer (helyett 32 alkalommal, mint az előző kiviteli alak), a legrosszabb esetben növekszik 1/128. Átlagai tömörítési arány az algoritmus szintjén mutatók az első kiviteli alakban. Egy hasonló tömörítési eljárást alkalmazzuk, mint az egyik algoritmus támogatott TIFF formátumban. valamint a TGA formátumban.

Hatékonyabb módszer a tömörítés veszteségmentes eljárás Lempella-Ziv (LZ) tiszteletére nevezték el két izraeli matematikus, aki azt javasolta, hogy 1977-ben. A módszer alapja az a tény, hogy az egyes fájlok, rendszerint több ismétlődő bináris kombináció. Például a szövegben a program egy magas szintű programozási mindig találkozott kombinációi karakterek (és benyújtja a szöveg - kombinációja a megfelelő byte) kapcsolódó szolgáltatók, eljárások és nyelvi funkciók. Nyilvánvaló, hogy ki lehet választani egy ilyen kombináció, hogy egy listát a számukra, és ennek megfelelően, vegye fel őket néhány rövidebb pályára. Majd cserélje ki a pályára a hosszú rövid, és egy fájlt, hogy rögzítse az asztalra, amelyen a csere. Kicsomagolása fájl csökken a lépés helyett, inverz termelt felvétel közben.

A gyakorlatban a tároló táblázat a hash tábla. elemekből álló mennyisége nem kevesebb, mint 8192 (2 13). Minden táblázat bejegyzés tartalmaz egy bejegyzést:

<код предыдущей подстроки; добавленный символ; код этой строки> .

A legfontosabb, hogy megtaláljuk a hossza 20 bit használatával generáltuk első két eleme a táblázatban tárolt, mint egyetlen szám (kulcs). Az alsó 12 bitet a szám, amelyet a kódot, és a következő 8 bit egy szimbólum érték.

Mint egy hash függvény használjuk:

Index (kulcs) = ((kulcs >> 12) Å kulcs) 8191,

>> ahol - bitenkénti jobbra váltás; Å - bitenkénti logikai művelet kizáró VAGY, - Bitorientált logika

Egy példa az LZ módszerrel GIF és TIFF képformátumok.

Kapcsolódó cikkek