Sådan komprimerer du data ved hjælp af huffman-kodning
Huffman`s algoritme bruges til at komprimere eller kode data. Normalt gemmes hvert tegn i en tekstfil som otte bits (cifre, enten 0 eller 1), der kortlægges til det tegn ved hjælp af en kodning kaldet ASCII. En Huffman-kodet fil bryder ned den stive 8-bit-struktur, så de mest almindeligt anvendte tegn opbevares på blot et par bits (`A` kunne være "10" eller "1000" snarere end ASCII, hvilket er "01100001"). De mindst almindelige tegn, så vil ofte tage meget mere end 8 bits (`z` kan være "00100011010"), Men fordi de forekommer så sjældent, skaber Huffman, i det hele taget en meget mindre fil end originalen.
Trin
Del 1 af 2:
Indkodning1. Tæl frekvensen af hvert tegn i den fil, der skal kodes. Medtag en dummy karakter for at markere slutningen af filen - det vil være vigtigt senere. For nu skal du kalde det EOF (slutningen af filen) og markere det som en frekvens på 1.
- For eksempel, hvis du vil kode for en tekstfil læsning "ab ab ab cab," Du ville have `A` med frekvens 3, `b` med frekvens 3, `` (rum) med frekvens 2, `C` med frekvens 1 og EOF med frekvens 1.

2. Opbevar tegn som trænoder og sæt dem i en prioritetskø. Du vil bygge et stort binærtræ med hver karakter som et blad, så du skal gemme tegnene i et format, så de kan blive noder af træet. Placer disse noder i en prioritetskø med hver tegns frekvens som dens nodes prioritet.

3. Begynd at bygge dit træ. Fjern (Or DEQUEUE) de to mest presserende ting fra prioritetskøen. Opret en ny træknude for at være forældrene til disse to noder, opbevare den første knude som dets venstre barn og det andet som dets højre barn. Den nye nodes prioritet bør være summen af prioriteterne i sit barn. Så enqueue denne nye node i prioriteringskøen.

4. Afslutning af dit træ: Gentag ovenstående trin, indtil der kun er en node i køen. Bemærk, at i tillæg til de noder, du har oprettet for tegnene og deres frekvenser, vil du også være dequinging, dreje til træer og genpåfører forældre noder, noder, der allerede er selv træer.

5. Opret AN kodning af kort. Gå gennem træet for at nå hver karakter. Hver gang du besøger et node venstre barn, er det en `0`. Hver gang du besøger et knudepunkts højre barn, er det en `1`. Når du kommer til et tegn, skal du gemme karakteren med sekvensen af 0s og 1s at det tog for at komme derhen. Denne sekvens er, hvad tegnet vil blive kodet som i den komprimerede fil. Gem tegnene og deres sekvenser i et kort.

6. I outputfilen skal du inkludere kodningskortet som et overskrift. Dette vil gøre det muligt for filen at blive afkodet.

7. Kode for filen. For hvert tegn i filen, der skal kodes, skal du skrive den binære sekvens, du har gemt på kortet. Når du er færdig med at kodning af filen, skal du sørge for at tilføje EOF til slutningen.
Del 2 af 2:
Afkodning1. Læs i en Huffman-kodet fil. Først skal du læse overskriften, som skal være kodningskortet. Brug dette til at opbygge et dekodningstræ på samme måde, du har bygget det træ, du plejede at kode for filen. De to træer skal være identiske.

2. Læs i det binære etcifret ad gangen. Traverse træet som du læser: Hvis du læser i en `0`, skal du gå til venstre barn i noden, du er på, og hvis du læser i en `1`, skal du gå til det rigtige barn. Når du når et blad (en node uden børn), er du ankommet til et tegn. Skriv tegnet i den afkodede fil.

3. Gentag, indtil du når EOF. Tillykke! Du har afkodet filen.
Tips
Del på sociale netværk :