|
Miért van
igény tömörítésre?
A számítógépes alkalmazások egyre nagyobb adatállományokkal
dolgoznak. Ezek tárolása helyigényes, továbbítása pedig a
korlátozott sávszélesség miatt időigényes. Bár folyamatosan
növekszik a rendelkezésre álló tárolóterület és ennek fajlagos ára
is csökken, valamint egyre nagyobb sávszélesség áll rendelkezésre
elérhető áron, célszerű a gazdaságosabb tárolás és továbbítás
érdekében állományainkat a lehető legkisebb méretben tárolni. Erre
szolgál a tömörítés.
Mi teszi lehetővé a tömörítést?
A számítógépen használt állományok szinte mindig több jelet
tartalmaznak, mint amennyi az általuk hordozott információ
megjelenítéséhez szükséges lenne azaz szinte mindig redundánsak. A
redundancia hasznos is lehet, ha szándékosan alakították vagy
növelték a redundanciát, például hibajavító kóddal. Ebben az esetben
állományaink valamennyire védettek a sérüléssel szemben. (Sérülés
esetén éppen a szándékolt többlet ad lehetőséget a helyreállításra.)
Az állományok a redundancia csökkentése, kiküszöbölése révén kisebb
méretűvé alakíthatóak. A tömörítés lényege tehát a redundancia
minimálisra csökkentése, ideális esetben teljes kiküszöbölése.
Veszteséges és veszteségmentes tömörítés
A tömörítési eljárások egyik fajtája megfordítható (reverzibilis),
azaz a tömörítő (vagy ahhoz rendelhető) eljárással pontosan
visszaállítható az eredeti jelsorozat, Veszteségmentes tömörítéssel
kell adatokat, szövegeket, adatbázisokat és programokat tömöríteni.
A tömörítők másik csoportja a tömörítendő jelsorozat bizonyos
elemeit egyszerűen kihagyja a tömörítés során. A tömörített
adatokból így teljes pontossággal nem állítható helyre a
tömörítetlen jelsorozat. Az esetek többségében azonban ez
elfogadható; álló- vagy mozgóképek, hangok esetében komponensek
kerülnek kihagyásra, melyek az állomány „élvezeti értékét" nem
befolyásolják számottevően. Veszteséges tömörítéssel általában
sokkal nagyobb tömörítési arány érhető el.
Hibakezelés
A tömörített állomány redundanciája minimális, hibás állapotának
felismerése, javítása tehát problémás. Ezért szokás a tömörített
jelsorozatról speciális matematikai algoritmussal ellenőrző összeget
készíteni. Az algoritmus - a titkosításban, hitelesítésben is
használatos ilyen - jellemzője, hogy tetszőleges nagy jelsorozatról
állandó, kisméretű jelsorozatot generál, hogy az eredeti jelsorozat
apró változása az ellenőrző összeget változtatja meg és, hogy
elvileg kizárt azonos ellenőrző összeg két, különböző jelsorozathoz.
Az algoritmus ismeretében elkészül ez az ellenőrző összeg (CRC,
Cyclic Redundancy Checking), majd átvitel, feldolgozás előtti
kicsomagolás után ismét. Ha e kettő nem egyezik, akkor a tömörített
anyag sérült! A CRC csak hibaellenőrzésre való. Léteznek hibajavító
megoldások is, de ezek természetüknél fogva ismét csak növelik a
redundanciát, és ezzel csökkentik a tömörítés hatékonyságát!
Tömörítési algoritmusok
Igen sok tömörítési eljárást dolgoztak ki. Ezek közös jellemzője,
hogy adott feltételek, meghatározott jellegű adatsorozat esetén
nyújtják a legjobb tömörítési arányt és/vagy legkisebb a
futásidejük.
Blokkméret kihasználása
A tárolóterület helyfoglalását csökkenti. Az adatállományaink kötött
hosszúságú tárolóterület-egységekben kerülnek rögzítésre, ezek a
blokkok. Egy blokkban cs egy állomány (egy állománynak a része)
lehet. Ha pl. 512 byte a blokkméret, ennél kisebb állományok (vagy
azok, melyek byte-ban mért hosszát a blokkmérettel osztva maradékot
adnak) felhasználatlan byte-okat hagynak. Amennyiben több állományt
„összefogunk", akkor a tárolás folyamatossá, felhasználatlan
byte-októl mentessé tehető. A TAR tömörítés ezen az elven működik.
RLE (Run Length Encoding), futamhossz kódolás
Azonos jelekből álló sorozatokat tartalmazó adatsorozat
tömörítésének egyszerű módszere. Ez a tömörítés egy-egy jelsorozatot
két jellel helyettesít: az egyik j a sorozatot alkotja, a másik az
ismétlődés száma. A kódolás akkor eredmény tömörítést, ha az
ismétlődő jelsorozat kettőnél több (azonos) jelből áll. Veszt
segmentes tömörítés.
Problémát jelent, hogy a tömörített állományban/állapotban meg kell
különböztetni az adatot és az ismétlődést jelző számot. Erre
általában speciális jel használnak (ez azonban tovább rontja a
tömörítés hatásfokát). Ennek alapján több alváltozata is használatos
az RLE algoritmusnak.
LZW (Lempel-Ziv-Welch) algoritmus
Ábrahám Lempel és Jacob Ziv 1978-ban publikált egy tömörítésre szánt
algoritmust LZ78 néven. Terry Welch írta le ennek továbbfejlesztett
változatát 1984-ben, ez lett az LZW algoritmus. Ez is
veszteségmentes tömörítés.
Igen elterjedt, a Unix-rendszerek egyik tömörítő segédprogramja,
valamint a GIF képállomány tárolási formátuma is ezt használja, de
pl. PDF adatábrázolás is alkalmazhat ilyen tömörítő algoritmust.
Ennek az algoritmusnak ismertek módosulatai: az elsőnek publikált
LZ77-et eredeti szerzői egy évre rá LZ78 néven írva ismét
közreadták; ehhez hasonlóan az alapalgoritmus továbbfejlesztései
James Storer és Thomas Szymanski által közzétett LZSS algoritmus,
valamint fent is említett LZW eljárás is. Az LZW algoritmus az
ismétlődő jelsorozatokat tömöríti.
Huffman-kódolás
ódszer alapötlete az, hogy a tömörítendő jelsorozatban lehetséges
jelek nem mindegyike bukkan fel azonos gyakorisággal. Amennyiben a
gyakoribb jeleket rövidebb bináris jelsorozattal ábrázoljuk, akkor
ez tömörítést eredményezhet még akkor is, ha ezért cserébe a
ritkábban felbukkanó jeleket az alapértelmezett-hosszabb jellel kell
ábrázolni. Szokás az ilyen tömörítőket statisztikai tömörítőnek is
nevezni. Ezek is veszteségmentes tömörítési eljárások. Első lépésben
a tömörítendő jelek gyakoriságát kell megállapítani. Akóvetkező
lépésben bináris fa készül. Fontos, hogy egy tömörítendő
jelsorozathoz csak egyetlen bináris fa rajzolható, ez a kitömörítés
egyértelműségének kulcsa. A harmadik lépésben a fa minden éléhez 0
vagy 1 lesz hozzárendelve. A negyedik, befejező lépésben minden
levél kódját képezzük úgy, hogy a gyökértől a levélig sorba tesszük
a 0-s és l-es jeleket. Az így kialakuló ún. kódszavakat használva az
eredeti jelsorozatnál a tömörített kisebb lehet.
A módszernek két fő változata ismert. A statikusnak nevezett
változatban kétszer kell a tömörítendő adatokat végigolvasni: az
elsőben a kódszótár készül, a másodikban a tömörítés. E kétszeri
olvasás hátrány, az is, hogy a kódszótárt a tömörített adathoz kell
csatolni, de egészében gyors a módszer. A másik lehetséges mód az,
hogy tömörítés közben készül a statisztika. Ez a dinamikus mód,
amely csak átlagos eloszlású tömörítendő jelsorozatra ad jó
eredményt.
Aritmetikai kódolás
Veszteségmentes statisztikai eljárás. Az alapötlet igen régi, Claude
E. Shannon 1948-ban publikálta, de fokozott számolás- és
számábrázolás-igénye erősen gátolja elterjedését. A tömörítendő
jelsorozat elemeihez adott számtartomány egy részintervallumát
rendeljük a tömörítendő jelsorozatban való előfordulásának
arányában.
Tömörített fájlformátumok JPEG
Képek tömörítésére használatos veszteséges tömörítés. A képek
színváltozásának adataiból hagy el értéket, mivel az emberi szem a
fényességváltozásra érzékenyebb. A 8 x 8-as blokkokban hajt végre
transzformációt, majd az így kapott értékeket rendezi és
Huffman-kódolással tömöríti. (A blokkokra bontás miatt, nagy
tömörítési arány esetén jelentkezik a képek „kikockásodása".)
MP3 (MPEG-1/2 Audio Layer 3)
Veszteséges, hangok tömörítésére alkalmazott módszer. 1992-ben
fejlesztette ki a Fraunhofer Institute. Igen jól tömörít, a
hanghatást kevéssé rontja. Az emberi hallás szelektivitására épít,
azaz bizonyos hangok más hangok elnyomását (közeli frekvenciákon
csak az intenzívebb hangot érzékeljük) kihasználva hagy ki a
tömörítendő jelsorozatból jeleket. A tömörítés fontos - de nem
kizárólagos -jellemzője a bitsűrűség, azaz annak megadása, hogy
másodpercenként hány bináris számjegy tárolódik. Minél nagyon ez az
érték, annál jobb a hangzásminőség. Korábban ez egy zeneszámra
állandó volt, újabban dinamikusan változtatják a tömörítők.
WMA (Windows Media Audio)
A Microsoft által hangok tömörítésére kidolgozott veszteséges
tömörítő eljárás. Jobban tömörít, mint az MP3, de később jelent meg,
ezért támogatottsága nem annyira elterjedt.
MPEG (Motion Picture Experts Group)
Veszteséges, mozgóképek tömörítésére kidolgozott szabványcsalád.
Több változatából az 1998-ban közreadott MPEG-4 a legelterjedtebb.
Fraktáltömörítés
Veszteséges tömörítési eljárás, amely azon alapul, hogy a
természetben előforduló jelsorozatokban minták, pontosabban
önhasonló minták fordulnak elő. (Önhasonló: kevés és egyszerű
transzformációval, pl. nyújtás, eltolás és elforgatás, az önhasonló
minták azonossá tehetők.) Összevethető a hatékonysága a JPEG
tömörítéssel, de élesebb kontúrok esetén jobb eredményt ad.
Önkicsomagoló állomány
Probléma lehet, ha a csomag készítéséhez használt tömörítő
(kicsomagoló) ott, ahol a csomag tartalmát fel kellene használni,
nem áll rendelkezésre. Ennek megelőzésére lehetséges olyan
tömörített állományt létrehozni, amely a tömörített adatok mellett
tartalmaz egy rövid futtatható programot is, aminek egyetlen célja a
mellé csomagolt tömörített állomány helyreállítása. Ezek az
önkibontó vagy önkicsomagoló, azaz SFX (SelF eXtracting) állományok.
Többszeletes tömörítvény
Problémát jelent, ha a tömörített állomány mérete nagyobb, mint ami
egy adathordozóra ráfér. Ilyen helyzetek megoldására a tömörítő
programok módot adnak arra, hogy a tömörített adatokat több (akár az
adathordozó kapacitásával egyező méretű) fájl formájában állítsuk
elő. Lehetséges olyan csomagot készíteni, amely több állományból
áll. Ezeknek a szeleteknek (köteteknek) a mérete beállítható, vagy
ezt a méretet az adathordozó mérete határozza majd meg. Ennek a
hajlékonylemezes adathordozó elterjedt használata során volt
fokozott jelentősége.
Röptömörítés
A tömörítendő jelsorozat kétféle módon alakítható át tömörített
jelsorozattá: az egyik során előbb átolvassa a tömörítő a
tömörítendő jeleket, majd kialakítja a tömörített jelsorozatot, a
másik módszer során a tömörítendő jelek olvasása során röptében
hozza létre a tömörített jelet. Legalább ilyen fontos az
ellentettje, amikor a tömörített állomány kicsomagolása a fájl
olvasásával egy menetben történik meg. Sok futtatható, végrehajtható
állomány esetében alkalmazzák ezt a módszert.
File- és drive tömörítés
A tömörítés egyik fontos felhasználási területe az adattárolási
helyigény csökkentése. Ennek egyik megközelítési módja az, hogy
állományainkat, esetleg azok egy-egy csoportját tömörítjük tárolás
előtt, majd kitömörítjük felhasználás előtt. Lehetséges a használt
tároló teljes tartalmát tömöríteni, ennek során minden olvasás előbb
kitömörítést igényel, illetve minden írás betömörítéssel jár.
Programok, állományformátumok
Néhány gyakrabban használt tömörítő program és tömörített
file-formátum: ZIP: igen elterjedt, veszteségmentesen tömörített
állománytípus. Számtalan program használja, pl. Windows alatt WinZIP
ARJ: Róbert K. Jung által készített azonos nevű programmal
készíthető tömörítvény, veszteségmentes tömörítést valósít meg.
Elterjedt program Windows alatt.
Igen sok opciója van a tömörítvény létrehozatalához. A programnak
van freeware és kereskedelmi változata, utóbbi több szolgáltatással
rendelkezik. RAR: Eugène Roshal hasonló nevű programjának
állománytípusa, veszteségmentes tömörítést tartalmaz. A RAR
formátumot több-kevesebb korlátozással több más tömörítő is kezeli.
JPG: JPEG, azaz veszteséges tömörítés, képek tömörítésére
használatos. A kép minőségromlása árán igen nagy tömörítés érhető el
ilyen állománytípusban. Sok képkezelő program ír és olvas ilyen
formátumban, illetve a hardvereszközök (szkenner, digitális
fényképezőgép) is ilyen formában rögzítik a képet. MP3: veszteséges
hangtömörítés, számtalan program alkalmazza ezt a formátumot (is),
pl. Audiograbber. |
|