Welkom op de Nederland Computer Kennisnetwerk!  
 
Zoeken computer kennis
Home Hardware Netwerken Programmering Software Computerstoring Besturingssysteem
Computer Kennis >> Software >> gegevenscompressie >> Content
Hoe werken binaire compressie-algoritmen om de grootte van gegevensbestanden te verkleinen?
Binaire compressie-algoritmen werken door het identificeren en exploiteren van patronen, redundanties en statistische waarschijnlijkheden binnen de binaire gegevens van een bestand. Ze bereiken dit door middel van een verscheidenheid aan technieken, grofweg gecategoriseerd als verliesloze en verliesgevende compressie. We zullen ons concentreren op verliesvrije compressie, omdat deze wordt gebruikt om de exacte originele gegevens te behouden.

Hier is een overzicht van veelgebruikte verliesvrije binaire compressiemethoden:

1. Redundantie en patronen identificeren:

* Herhaling: De eenvoudigste vorm. Als dezelfde byte of reeks bytes meerdere keren wordt herhaald, vervangt het algoritme deze door een markering die de herhaalde reeks en het aantal herhalingen aangeeft. Dit wordt vaak Run-Length Encoding (RLE) genoemd . Bijvoorbeeld:

* Origineel:`AAAAABBBCCCDD`

* RLE gecomprimeerd:`5A3B3C2D` (5 A's, 3 B's, 3 C's, 2 D's)

* RLE is het meest effectief als er lange runs van dezelfde gegevens zijn.

* Compressie op basis van woordenboeken: Deze methode bouwt een woordenboek (of tabel) op van vaak voorkomende reeksen bytes. In plaats van elke keer de volledige reeks op te slaan, slaat het algoritme de index (of code) die die reeks vertegenwoordigt op in het woordenboek.

* LZ77 en LZ78 (en hun varianten LZW, Deflate): Dit zijn op woordenboeken gebaseerde algoritmen. Ze werken door een glijdend venster van recentelijk bekeken gegevens te behouden.

* LZ77: Zoekt naar overeenkomende reeksen *binnen* het schuifvenster. Wanneer het een overeenkomst vindt, slaat het een `(afstand, lengte)`-paar op, waarbij:

* `afstand`:Hoe ver terug in het venster de wedstrijd begint.

* `lengte`:Hoe lang de overeenkomende reeks is.

* LZ78: Bouwt een woordenboek op van *nieuwe* zinnen zodra hij deze tegenkomt. Het codeert elke nieuwe zin als `(index, karakter)`, waarbij:

* `index`:De index van het *langste* voorvoegsel van de zin die al in het woordenboek staat.

* `teken`:het teken dat het voorvoegsel uitbreidt om de nieuwe zin te creëren.

* LZW (Lempel-Ziv-Welch): Een verbetering ten opzichte van LZ78. Het begint met een vooraf geïnitialiseerd woordenboek dat alle afzonderlijke tekens bevat. Het bouwt het woordenboek dynamisch op terwijl het de gegevens verwerkt. LZW staat erom bekend dat het wordt gebruikt in het GIF-beeldformaat (hoewel patenten op LZW een tijdje voor problemen zorgden).

* Leeglopen: Combineert LZ77 met Huffman-codering (hieronder uitgelegd) voor een nog betere compressie. Het wordt gebruikt in gzip, zlib en PNG. Het is heel gebruikelijk.

2. Statistische codering (entropiecodering):

* Deze methoden analyseren de frequentie van verschillende symbolen (bytes) in de gegevens en wijzen kortere codes toe aan frequentere symbolen en langere codes aan minder frequente symbolen. Dit is gebaseerd op de informatietheorie, waarbij meer waarschijnlijke gebeurtenissen minder informatie vereisen om te verzenden.

* Huffman-codering: Een coderingsschema met variabele lengte. Het bouwt een binaire boom op basis van de frequenties van de symbolen. De vaker voorkomende symbolen worden dichter bij de wortel van de boom geplaatst, wat resulteert in kortere codelengtes.

* Het algoritme genereert een voorvoegselcode, wat betekent dat geen enkele code een voorvoegsel is van een andere code, waardoor dubbelzinnigheid tijdens het decoderen wordt voorkomen.

* Rekenkundige codering: Vertegenwoordigt de gehele gegevensstroom als een enkel gebroken getal tussen 0 en 1. De lengte van de breuk wordt bepaald door de waarschijnlijkheid van de symbolen. Rekenkundige codering bereikt vaak een betere compressie dan Huffman-codering, vooral als het gaat om symbolen met zeer verschillende waarschijnlijkheden. Het is echter rekenintensiever.

Illustratief voorbeeld (vereenvoudigd):

Stel je voor dat we de volgende gegevens hebben:`AABBBCCCAADDDEEEFFFF`

1. RLE: Kan worden gecomprimeerd tot `2A3B3C2A3D3E4F` (vermindert dit, maar niet drastisch).

2. Huffman-codering:

* Frequentieanalyse:

* EEN:5

* B:3

* C:3

* D:3

* E:3

* F:4

* Huffman-boomconstructie (voorbeeld):

* Combineer minst frequent:B (3) en C (3) -> Knooppunt BC (6)

* Combineer D (3) en E (3) -> Knooppunt DE (6)

* Combineer BC (6) en DE (6) -> Knooppunt BCDE (12)

* Combineer F (4) en A (5) -> Knooppunt AF (9)

* Combineer AF (9) en BCDE (12) -> Root (21)

* Codes toewijzen (0 voor links, 1 voor rechts bij het doorkruisen van de boom) - *dit kan variëren op basis van de implementatie!*

* EEN:00

*B:100

* C:101

* D:110

* E:111

* V:01

* Gecomprimeerde gegevens:`000010010010010110110110111111110101010101` (veel korter dan het origineel, vooral voor grote datasets!)

Belangrijke overwegingen:

* Complexiteit: Verschillende algoritmen hebben verschillende rekencomplexiteiten. Sommige zijn sneller voor het coderen/decoderen, maar bereiken lagere compressieverhoudingen. Anderen zijn langzamer maar bereiken een hogere compressie.

* Compressieverhouding: De verhouding tussen de oorspronkelijke bestandsgrootte en de gecomprimeerde bestandsgrootte. Een hogere verhouding duidt op een betere compressie.

* Geheugengebruik: Algoritmen vereisen geheugen voor buffers, woordenboeken en boomstructuren. Geheugengebruik kan een beperkende factor zijn, vooral bij het comprimeren van grote bestanden.

* Gegevenstype: Sommige algoritmen zijn beter geschikt voor specifieke soorten gegevens (bijvoorbeeld tekst, afbeeldingen, audio). Algoritmen die ruimtelijke lokaliteit exploiteren, zijn bijvoorbeeld goed voor afbeeldingen.

Samengevat werken binaire compressie-algoritmen door:

1. De gegevens analyseren: Patronen, herhalingen en statistische frequenties identificeren.

2. De gegevens efficiënter weergeven: Gebruik kortere codes voor algemene elementen en langere codes voor zeldzame elementen.

3. Metagegevens opslaan: Het opslaan van informatie die nodig is om de gegevens te decomprimeren (bijvoorbeeld woordenboeken, Huffman-bomen).

De keuze van het algoritme hangt af van de specifieke vereisten van de toepassing, inclusief de gewenste compressieverhouding, de beschikbare rekenbronnen en het type gegevens dat wordt gecomprimeerd. Vaak worden hybride benaderingen (zoals Deflate) gebruikt om de sterke punten van verschillende technieken te combineren.

Previous: Next:
  gegevenscompressie
·Minimale grootte van wisselbes…
·Wat is Header Compression ? 
·Hoe je Zip Folder Files Toegan…
·Hoe kan ik een Iomega Zip 250 …
·Wat is modulatie in datacommun…
·Hoe te comprimeren op Thunderb…
·Hoe kan ik video bestanden te …
·Welke computerpoort verzendt a…
·Hoe je QuickTime comprimeren 
  Related Articles
Wat is de betekenis van tijdssegmenten i…
Wat is de betekenis van het primaire att…
Wat is de betekenis van de werking van d…
Wat is de betekenis van overhead in comp…
Wat is de betekenis van efficiëntie in …
Wat is de rol van schema in programmeert…
Wat is de rol van schema in de informati…
Wat is het doel van het Windows-archiefk…
Wat is het proces voor decodering van be…
  Software Articles
·Hoe PC branden op DVD 
·Hoe de Mic op Skype Verander 
·Hoe kan ik iTunes op Windows XP Professi…
·Hoe te converteren een Adobe Photoshop- …
·Hoe maak je een nieuwe Swatch Plaat in P…
·Hoe PDF-bestanden creëren en weergeven 
·Een extensie is mislukt initialiseren . …
·Is er een truc om Installeer Photoshop C…
·Hoe drukt u een selectie of werkblad af?…
Copyright © Computer Kennis https://www.nldit.com