Bestandscompressieprogramma's verkleinen de bestandsgrootte door verschillende algoritmen te gebruiken om redundantie te verwijderen en de gegevens efficiënter weer te geven. Ze "verwijderen" feitelijk geen informatie; in plaats daarvan vinden ze slimme manieren om het te coderen met minder bits. Er zijn twee hoofdcategorieën:verliesvrije en verliesgevende compressie.
1. Verliesloze compressie:
Dit type compressie garandeert dat het originele bestand perfect kan worden gereconstrueerd vanuit de gecomprimeerde versie. Het wordt gebruikt voor tekstbestanden, broncode, spreadsheets en andere gegevens waarbij zelfs een klein beetje informatieverlies onaanvaardbaar is. Veel voorkomende technieken zijn onder meer:
* Run-Length Encoding (RLE): Deze eenvoudige methode vervangt opeenvolgende herhalende tekens of bytes door een enkele instantie van het teken en het aantal keren dat het wordt herhaald. 'AAABBBCC' wordt bijvoorbeeld '3A3B2C'. Het is zeer effectief voor gegevens met lange reeksen identieke waarden.
* Huffman-codering: Dit wijst kortere codes toe aan veel voorkomende symbolen en langere codes aan minder frequente symbolen. Door gebruik te maken van de waarschijnlijkheidsverdeling van symbolen in de gegevens wordt een aanzienlijke compressie bereikt. In Engelse tekst is de letter 'e' bijvoorbeeld heel gebruikelijk, dus deze krijgt een korte code, terwijl minder voorkomende letters zoals 'z' langere codes krijgen.
* Lempel-Ziv (LZ)-algoritmen: Dit zijn meer geavanceerde methoden die herhalende patronen in de gegevens identificeren. In plaats van elk symbool afzonderlijk te coderen, creëren ze een woordenboek van terugkerende patronen en coderen deze met korte verwijzingen. Veel voorkomende variaties zijn onder meer LZ77, LZ78 en LZW (Lempel-Ziv-Welch), waarbij de laatste wordt gebruikt in het GIF-beeldformaat. Het woordenboek wordt doorgaans dynamisch opgebouwd terwijl de gegevens worden gecomprimeerd en gedecomprimeerd.
* Compressie op basis van woordenboeken: Deze methoden (inclusief LZ-algoritmen) creëren een woordenboek van herhalende reeksen en vervangen deze door korte codes. Ze werken goed op gegevens die veel herhalingen bevatten.
* Burrows-Wheeler-transformatie (BWT): Deze techniek herschikt de gegevens zodat vergelijkbare tekens worden geclusterd, waardoor andere compressiemethoden gemakkelijker effectief kunnen werken. Het wordt vaak gebruikt in combinatie met andere algoritmen, zoals move-to-front-transformatie en run-length-codering.
2. Compressie met verlies:
Met dit type compressie worden hogere compressieverhoudingen bereikt door bepaalde gegevens die als minder belangrijk worden beschouwd, te verwijderen. Dit is acceptabel voor multimediagegevens (afbeeldingen, audio, video) waarbij enig verlies aan betrouwbaarheid aanvaardbaar is. Voorbeelden zijn onder meer:
* JPEG (afbeeldingen): Maakt gebruik van Discrete Cosinus Transform (DCT) om de hoeveelheid gegevens te verminderen die nodig is om een afbeelding weer te geven. Het negeert een deel van de hoogfrequente informatie, die minder waarneembaar is voor het menselijk oog.
* MP3 (audio): Maakt gebruik van psycho-akoestische modellering om frequenties te verwijderen die worden gemaskeerd door luidere geluiden. Dit maakt een aanzienlijke verkleining van de bestandsgrootte mogelijk zonder een groot waargenomen verlies aan audiokwaliteit.
* MPEG (video): Gebruikt technieken zoals bewegingscompensatie om alleen veranderingen tussen frames te coderen, waardoor de redundantie aanzienlijk wordt verminderd.
Samengevat:
Bestandscompressieprogramma's gebruiken een combinatie van algoritmen om redundanties in gegevens te identificeren en te exploiteren. Lossless-methoden garanderen een perfecte reconstructie, terwijl lossy-methoden sommige gegevens opofferen voor hogere compressieverhoudingen. De keuze van het algoritme hangt af van het type gegevens dat wordt gecomprimeerd en het acceptabele niveau van gegevensverlies. Veel moderne compressieprogramma's gebruiken een combinatie van deze technieken om de compressie-efficiëntie te optimaliseren. |