Hoe gegevens te comprimeren met behulp van huffman-codering
Huffman`s algoritme wordt gebruikt om gegevens te comprimeren of te coderen. Normaal gesproken wordt elk teken in een tekstbestand opgeslagen als acht bits (cijfers, 0 of 1) die kaart naar dat teken met behulp van een codering genaamd ASCII. Een door Huffman-gecodeerd bestand breekt de stijve 8-bitstructuur af, zodat de meest gebruikte tekens in slechts een paar bits worden opgeslagen (`A` zou kunnen zijn "10" of "1000" in plaats van de ASCII, dat is "01100001"). De minst gemeenschappelijke personages, zullen dan vaak veel meer dan 8 bits nemen (`Z` zou kunnen zijn "00100011010"), maar omdat ze zo zelden voordoen, creëert Huffman over het algemeen een veel kleiner bestand dan het origineel.
Stappen
Deel 1 van 2:
Codering1. Tel de frequentie van elk teken in het bestand dat moet worden gecodeerd. Neem een dummy-personage op om het einde van het bestand te markeren - dit zal later belangrijk zijn. Bel het voor nu het EOF (einde van het bestand) en markeer het als een frequentie van 1.
- Als u bijvoorbeeld een tekstbestand-lezen wilt coderen "AB AB-cabine," Je zou `A` hebben met frequentie 3, `B` met frequentie 3, `` (ruimte) met frequentie 2, `C` met frequentie 1 en EOF met frequentie 1.

2. Bewaar tekens als boomknooppunten en leg ze in een prioritaire wachtrij. Je brengt een grote binaire boom met elk personage als een blad, dus je moet de personages in een formaat opslaan, zodat ze knooppunten van de boom kunnen worden. Plaats deze knooppunten in een prioriteitswachtrij met de frequentie van elke personage als de prioriteit van het knooppunt.

3. Begin met het bouwen van je boom. Verwijderen (of dequate) De twee meest urgente dingen van de wachtrij van de prioriteit. Maak een nieuw boomknooppunt om de ouder van deze twee knooppunten te zijn, het eerste knooppunt opslaan als het linker kind en de tweede als het juiste kind. De prioriteit van het nieuwe knooppunt moet de som van de prioriteiten van zijn kind zijn. En vervolgens dit nieuwe knooppunt in de wachtrij van de prioriteit.

4. Voltooi je boom: Herhaal de bovenstaande stap totdat er slechts één knooppunt in de wachtrij is. Merk op dat, naast de knooppunten die u hebt gemaakt voor de personages en hun frequenties, u ook ontkoppelt, in bomen wordt, en het opnieuw enquueuen van ouderknooppunten, knooppunten die al zelf bomen zijn.

5. Creëer een Codering van kaart. Loop door de boom om elk personage te bereiken. Elke keer dat je het linker kind van een knooppunt bezoekt, is dat een `0`. Elke keer dat je het juiste kind van een knooppunt bezoekt, is dat een `1`. Als je bij een personage stapt, bewaar dan het personage met de reeks van 0s en 1s die het duurde om er te komen. Deze sequentie is wat het teken wordt gecodeerd als in het gecomprimeerde bestand. Bewaar de personages en hun reeksen op een kaart.

6. In het uitvoerbestand, neem de coderingskaart op als koptekst. Hierdoor kan het bestand worden gedecodeerd.

7. Codeer het bestand. Voor elk teken in het bestand dat moet worden gecodeerd, schrijf dan de binaire reeks die u op de kaart hebt opgeslagen. Zodra u klaar bent met het coderen van het bestand, moet u het EOF aan het einde toevoegen.
Deel 2 van 2:
Decodering1. Lees in een HuffMan-gecodeerd bestand. Lees eerst de koptekst, wat de coderingskaart zou moeten zijn. Gebruik dit om een decoderingsboom op te bouwen op dezelfde manier waarop u de boom hebt gebouwd die u hebt gebruikt om het bestand te coderen. De twee bomen moeten identiek zijn.

2. Lees in het binaire één cijfer tegelijk. Doorkruisen de boom terwijl je leest: als je in een `0` leest, ga dan naar het linker kind van het knooppunt dat je bent, en als je leest in een `1`, ga dan naar het juiste kind. Wanneer u een blad bereikt (een knooppunt zonder kinderen), bent u aangekomen bij een personage. Schrijf het personage in het gedecodeerde bestand.

3. Herhaal totdat u het EOF bereikt. Gefeliciteerd! Je hebt het bestand decoderen.
Tips
Deel in het sociale netwerk: