Ha írok egy viszonylag rövid kódot (10-20 sor), azt elmentem, majd a fájlt tömörítem, akkor miután megnyitom, a tömörítésből eredő veszteségek megtalálhatók lesznek a kódban?
Változni fog a kód? Ha nem, azt a kódot mi alapján tudta tömöríteni?
Esetleg ha többször tömörítjük egymás után, ez csak akkor lesz észlelhető? Vagy ez programnyelvtől függ, amiben írtuk a kódot?
Vannak ún. veszteségmentes tömörítési eljárások (pl. a ZIP és családja) és vannak veszteséges tömorítési eljárások (pl. ilyet használ a JPEG kép formátum).
A jellemzőik, hogy a veszteségmentes eljárások kevésbé tudnak tömöríteni mint a veszteségesek. De szövegek, programok, kódok, adatok esetén csak azok használhatóak, mert azok úgy vannak megalkotva, hogy a tömörített anyagból teljesen vissza állítható legyen teljesen. Hogy ezt miért tudjuk megtenni? Pl. egy szöveg az mindig jól tömöríthető. Már pl. csak azért is mert az alap ASCII karakterek (angol ABC kis és nagybetűi, számok, alap szimbolúmok, írásjelek stb.) 7 bitesek, amiket 8 biten tárolunk egy program kódjában. így minden beírt "betű" esetén van 1 db. kötelezően 0 értékű bit. Pl. ha megnézed a legismertebb C programot:
main( ) {
printf("hello, world\n");
}
Ez 36 karakter (a printf előtt egy darab tabulátor van) ebben a 36 karakterben van legalább 36 db. kötelezően 0 bit. Ha csak ezt "összepakolja" az ember 4 bájt "nyerhető" (és még csak egy triviális lépést tettünk a tömörítés felé). Azaz 0abc defg - 0hij klmn - 0opq rstu (a-u-ig itt az egyes bitpozíciók 1-0 értékeit jeleztem) így átalakítod, hogy abcd efgh - ijkl mnop - ... és így tovább. Máris van szemmel látható "nyereség". Nyilván ennél összetetebb tömörítési eljárások vannak. És mint itt látható ebből simán vissza állítható az eredeti bit folyam. (Nyilván ez addig használható amíg standard ASCII-t használunk, de ez most egy egyszerűsített példa és köszi a lepontozást!).
"Vagy ez programnyelvtől függ, amiben írtuk a kódot?"
Nem, ez inkább a tömörítési algoritmus hatékonyságától függ.
Ha a szövegfájlban felhasznált karakterek mondjuk csak 32 félék, akkor egy szimpla transzkódolással 3 bitet lehet nyerni karakterenként, mivel a szöveget 8bit/char helyett 5bit/char-on lehet rögzíteni.
Gyakoriságelemzéssel még nyerhető néhány bit, de minél hosszabb a tömörítendő adattömeg, annál jobb lesz a tömörgetés hatásfoka.
Ha tömörítés alatt azt érted, hogy ráeresztesz a kódra egy minifiert, hogy kisebb fájlméretet kapj, akkor maga a kód megmarad, csak éppen formázatlanul.
Például ez egy ilyen kód:
Láthatod, hogy minden megvan benne, ami az eredetiben is, csak éppen minden felesleges space, új sor, tabulátor kikerült belőle, lényegében olvashatatlan az egész. De működik és semmi nincs elveszve!
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!