Hoe werkt dat eigenlijk?

Het lijkt wel vreemd. Je kan met WinZip bestanden verkleinen, terwijl we toch geen gegevens verliezen. Sommige bestanden kunnen tot wel 99% verkleind worden! Maar hoe is dat mogelijk?

Hoe men de bestanden kan verkleinen is op grond van verschillende manieren die men gebruikt. Ik geen enkele "eenvoudige" algoritmen (dit is het systeem hoe dit in z'n werk gaat) van de meest bekende systemen. De echte exacte werking en gedetailleerde werking is veel te ingewikkeld.

De eenvoudigste verkleining van een bestand is door een hele reeks opeenvolging van dezelfde tekens te vervangen door een bepaalde code. Ieder bestand: een tekstbestand, maar ook een figuur en eender welk ander bestand is om te zetten naar een opeenvolging van letters en andere symbolen. Als in zo'n bestand bijvoorbeeld negen keer achter elkaar de letter A voorkomt, dan kan men dit vervangen door bvb. *A9. Dit is dus een speciaal, uniek symbool, hier een sterretje, gevolgd door de letter en vervolgens gevolgd door het aantal keren dat er herhaald moet worden.
Zo wordt volgende regel:
SEEEEEEEKJGSXOAAAAAAAMDKCBSKSOOODJSHLLLLNCXXXXXXXXX
vervangen door volgende regel:
S*E7KJGSXO*A7MDKCBSKSOOODJSH*L4NC*X9
Je ziet duidelijk dat dit de gegevens sterk verkleind. Het is echter pas nuttig voor een opeenvolging van 4 of meer dezelfde letters, bij 3 of minder is het niet nuttig. Want *A2 is in totaal 3 tekens, terwijl het maar "AA" voorsteld, wat maar 2 tekens is, dus wordt het bestand juist groter.
Spijtig genoeg komt een grote opeenvolging van dergelijke reeksen niet veel voor in de normale taal. Daarom is deze methode enkel nuttig voor andere soorten bestanden als bvb. geluid, figuren of bvb. de voorstelling van de DNA-code.

Een tweede manier om bestanden te verkleinen is als volgt. Men gaat veel voorkomende woorden of opeenvolgingen van tekens vervangen door een uniek teken. Zo gaat men bijvoorbeeld " een " vervangen door "§". Dit is een besparing van 4 tekens (de spatie ervoor en erachter meegerekend!). Zo gaat men dat doen met nog een hele reeks van veel voorkomende opeenvolgingen.
Bijvoorbeeld, volgende tekst:

Als een kat af en toe diep in slaap is, dan verandert de lichaamshouding. Meestal rolt hij zich dan van de ene kant naar de andere, sommige spierpartijen kunnen samentrekken, soms geeft hij een kreetje.
Als een kat in zijn slaap zijn buik laat zien is dat het beste bewijs van vertrouwen. De kat voelt zich beschermd en hoeft nergens bang voor te zijn.
Alle katten liggen het liefst daar waar ook hun mensen gezellig bij elkaar zitten: in bed, op de schommelstoel, op de tv. Als je dat niet wilt, moet je vanaf het begin consequent zijn: zet de kat net zo lang weer op de grond totdat ze opgeeft.

vervangen worden door volgende:

Als§kat af @ toe diep in slaap is, dan verandert#lichaamshouding. Meestal rolt h£ zich dan van#@e kant naar#andere, sommige spierpart£@ kunn@ sam@trekk@, soms geeft h£§kreetje.
Als§kat in z£n slaap z£n buik laat zi@ is dat het beste bew£s van vertrouw@.#kat voelt zich beschermd @ hoeft nerg@s bang voor te z£n.
Alle katt@ ligg@ het liefst daar waar ook hun m@s@ gezellig b£ elkaar zitt@: in bed, op#schommelstoel, op#tv. Als je dat niet wilt, moet je vanaf het begin consequ@t z£n: zet#kat net zo lang weer op#grond totdat ze opgeeft.

Waarbij volgende zaken werden vervangen:
" een " wordt "§"
"en" wordt "@"
" de " wordt "#"
"ij" wordt "£"

Deze eenvoudige toepassing, met amper 4 zaken te vervangen (in het echt worden er meer zaken vervangen), geeft in bovenstaande voorbeeldje een besparing van zo'n 10,5% !
Nadelen van deze techniek zijn echter dat het hoofdlettergevoelig is, met andere woorden is "de" en "De" iets anders en moet dus door een ander teken worden vervangen. Bovendien moet de tabel met de vervangen zaken, dus dat " een " "§" wordt ook mee worden opgeslagen wat ook weer extra geheugen kost. Hierdoor gaat deze techniek pas serieus besparen op langere teksten en kan onder optimale omstandigheden tot meer dan 50% gaan besparen!

Er zijn echter nog technieken. Voor de derde techniek moet je eerst weten hoe de informatie effectief wordt opgeslagen op de computer.

Een bestand bestaat altijd uit zogenaamde "bits". Dit zijn eenen en nullen achter elkaar. Deze opeenvolging van eenen en nullen zorgt ervoor dat men zo letters kan herkennen, figuren kan samenstellen, enz. Men zegt dat de bestanden "binair" zijn. Een binair stukje is bvb. 11010101110100010101000111010101010101111010001101101001010010101
De reden dat men dit gebruikt is omdat dit heel eenvoudig te verwerken is en op te slaan is door de computer. De 1 stelt men in de computer voor als wél een electrisch stroompje, de 0 als geen electrisch stroompje. Zo kan men gegevens doorgeven in de draden van de computer. Het opslaan op bvb. de harde schijf is door magnetisme: een stukje is wél magnetisch geladen (1) of niét magnetisch geladen (0). Op een CD of DVD wordt hetzelfde principe gebruikt, maar dan echter geen magnetisme of electrische stroompjes, maar miniscule putjes. Wél een putje is 1, geen putje stelt een 0 voor.

Bij teksten wordt er een zogenaamde ASCII tabel gebruikt, deze geeft aan dat een bepaalde opeenvolging van 8 bits één bepaalde letter moet voorstellen. Zo stelt bvb. "1000001" de letter A voor, en stelt bvb. "111001" het cijfer 9 voor.

Het is echter nogal onefficiënt indien we telkens 8 bits gaan gebruiken voor letters die enorm veel voorkomen, zoals bvb. de a, e, o en andere letters. Zo heeft men een onderzoek gedaan naar de letters die het meeste voorkomen door duizenden boeken en teksten te laten verwerken door de computer en zo een rangschikking op te stellen voor elke letter. Nu gaat men een speciale tabel opstellen die Huffman-tabel wordt genoemd naar de uitvinder ervan. De letters die het minste voorkomen worden met het meeste aantal bits voorgesteld, de letters die het meeste voorkomen, worden met minder bits voorgesteld. Zo zal de A worden voorgesteld door bvb. "00", terwijl de X die heel weinig voorkomt worden voorgesteld door bvb. "010101101".

Op deze manier kan men enorm efficiënt teksten gaan verkleinen, dit tot wel 99% verkleining!

Op een gelijkaardige manier kunnen ook figuren worden verkleind. Een figuur heeft meestal één of meerdere kleuren die heel veel voorkomen, terwijl andere kleuren mogelijk maar in één klein puntje voorkomen. Men gaat op gelijkaardige manier voor de kleur die het meeste voorkomt een hele korte bit opeenvolging gebruiken, terwijl men voor de kleur die maar enkele keren voorkomt veel meer bits voor gaat opslaan. Dit proces is minder efficiënt als bij teksten, maar kan toch een besparing opleveren tot zo'n 70% en bij bvb. figuren waar maar 1 of 2 kleuren in voorkomen tot 99%.

Er zijn verder nog veel meer technieken en ook bovenstaande technieken worden verfijnd om nog efficiënter te zijn. Je hebt nu echter een beeld hoe men dergelijke zaken kan doen, hoe men kan "toveren" en zo betanden kleiner maken.

Je weet nu ook waarom het steeds even kan duren voordat een bestand verkleind is of waarom het even kan duren voordat een bestand terug uitgepakt is. Dit is omdat de computer intussen de techniek moet toepassen om de gegevens te verkleinen of terug te herstellen naar de originele gegevens.
Je weet nu ook waarom niet àltijd alles wordt verkleind, dit zou het werken met de computer heel veel vertragen. Daarom kan je wel bestanden verkleinen, maar het is niet de bedoeling dat je dergelijke bestanden dag in, dag uit gebruikt, je kan ze dan beter in hun originele formaat behouden omdat ze anders constant moeten worden uitgepakt, terug worden ingepakt, terug uitgepakt, enz.

 

Om terug naar het begin te gaan van deze cursus, klik hier.