Comment compresser des données à l`aide du codage huffman
L`algorithme de Huffman est utilisé pour comprimer ou encoder des données. Normalement, chaque caractère d`un fichier texte est stocké sous forme de huit bits (chiffres, 0 ou 1) de la carte à ce caractère à l`aide d`un codage appelé ASCII. Un fichier codé Huffman décompose la structure rigide 8 bits afin que les caractères les plus couramment utilisés soient stockés dans quelques bits (`A` pourrait être "dix" ou alors "1000" plutôt que l`ASCII, qui est "01100001"). Les caractères les moins communs prendront souvent beaucoup plus de 8 bits (z `pourrait être "00100011010"), mais parce qu`ils se produisent si rarement, le codage de Huffman, dans l`ensemble, crée un fichier beaucoup plus petit que l`original.
Pas
Partie 1 de 2:
Codage1. Compter la fréquence de chaque caractère dans le fichier à coder. Inclure un caractère factice pour marquer la fin du fichier - cela sera important plus tard. Pour l`instant, appelez-le de l`EOF (fin du fichier) et marquez-le comme ayant une fréquence de 1.
- Par exemple, si vous souhaitez encoder une lecture de fichier texte "AB AB CAB," Vous auriez «A» avec fréquence 3, `B` avec fréquence 3, `` (espace) avec fréquence 2, `C` avec fréquence 1 et EOF avec fréquence 1.

2. Stocker des caractères comme des nœuds d`arbre et les mettre dans une file d`attente prioritaire. Vous construirez un gros arbre binaire avec chaque caractère comme une feuille, vous devez donc stocker les caractères dans un format de sorte qu`ils puissent devenir des nœuds de l`arbre. Placez ces nœuds dans une file d`attente prioritaire avec la fréquence de chaque personnage comme priorité de son nœud.

3. Commencez à construire votre arbre. Enlever (ou dequeuse) les deux choses les plus urgentes de la file d`attente prioritaire. Créez un nouveau nœud d`arborescence pour être le parent de ces deux nœuds, stockant le premier nœud en tant qu`enfant gauche et le second comme son enfant droit. La priorité du nouveau noeud devrait être la somme des priorités de son enfant. Ensuite, en faisez ce nouveau noeud dans la file d`attente prioritaire.

4. Terminez votre arbre: Répétez l`étape ci-dessus jusqu`à ce qu`il n`y ait qu`un seul noeud dans la file d`attente. Notez que, en plus des nœuds que vous avez créés pour les caractères et leurs fréquences, vous allez également désactiver, devenir des arbres et réapproquer les nœuds parents, les nœuds qui sont déjà eux-mêmes des arbres.

5. Créé un Carte de codage. Marcher dans l`arbre pour atteindre chaque personnage. Chaque fois que vous visitez l`enfant gauche d`un nœud, c`est un `0`. Chaque fois que vous visitez un enfant droit d`un nœud, c`est un «1». Lorsque vous arrivez à un personnage, stockez le personnage avec la séquence de 0s et 1s qu`il a fallu pour y arriver. Cette séquence est ce que le caractère sera codé comme dans le fichier compressé. Stocker les caractères et leurs séquences sur une carte.

6. Dans le fichier de sortie, incluez la carte de codage comme en-tête. Cela permettra au fichier à décoder.

7. Encoder le fichier. Pour chaque caractère du fichier à coder, écrivez la séquence binaire que vous avez enregistrée sur la carte. Une fois que vous avez terminé de coder le fichier, assurez-vous d`ajouter le EOF à la fin.
Partie 2 de 2:
Décodage1. Lire dans un fichier codé Huffman. Tout d`abord, lisez l`en-tête, qui devrait être la carte de codage. Utilisez ceci pour créer un arbre de décodage de la même manière que vous avez construit l`arbre que vous avez utilisé pour coder le fichier. Les deux arbres doivent être identiques.

2. Lire dans le binaire à un chiffre à la fois. Traverser l`arbre au fur et à mesure que vous lisez: Si vous lisez dans un «0», allez à l`enfant gauche du nœud, et si vous lisez dans un «1», allez à l`enfant droit. Lorsque vous atteignez une feuille (un nœud sans enfants), vous êtes arrivé à un personnage. Écrivez le caractère dans le fichier décodé.

3. Répéter jusqu`à ce que vous atteigniez le eof. Toutes nos félicitations! Vous avez décodé le fichier.