Académique Documents
Professionnel Documents
Culture Documents
: Codage Huffman
L'encodage Huffman est un algorithme de compression sans perte utilisé pour compresser
les données. C'est un algorithme développé par David A. Huffman. La compression ici signifie
utiliser moins de bits pour représenter les données.
Par exemple la chaîne « ABC » occupe 3 octets sans aucune compression. Supposons que si
le caractère A reçoit le code 00, le caractère B reçoit le code 01, le caractère C reçoit le code
10 à la suite de l'encodage. Pour stocker les mêmes données, nous n'aurions besoin que de 6
bits au lieu de 3 octets.
1. L’algorithme
Le codage de Huffman est un algorithme qui utilise la caractéristique de fréquence (ou
probabilité) des symboles et une structure arborescente binaire. Il se compose des 3 étapes
suivantes :
1
Ensuite, nous ordonnons facilement les symboles en fonction de leurs probabilités
représentant chaque symbole comme un nœud et appelons cela notre « collection ».
Maintenant, nous sommes prêts à passer l'étape suivante.
2
Nous pouvons jeter un coup d'œil et voir que même pour 21 caractères seulement, la
différence entre les données compressées et non compressées n'est pas négligeable.
5. Code python
https://github.com/YCAyca/Data-Structures-and-Algorithms-with-
Python/blob/main/Huffman_Encoding/huffman.py
# symbol
self.symbol = symbol
# left node
self.left = left
# right node
self.right = right
3
codes = dict()
if(node.left):
Calculate_Codes(node.left, newVal)
if(node.right):
Calculate_Codes(node.right, newVal)
return codes
def Huffman_Encoding(data):
symbol_with_probs = Calculate_Probability(data)
symbols = symbol_with_probs.keys()
4
probabilities = symbol_with_probs.values()
print("symbols: ", symbols)
print("probabilities: ", probabilities)
nodes = []
left.code = 0
right.code = 1
nodes.remove(left)
nodes.remove(right)
nodes.append(newNode)
huffman_encoding = Calculate_Codes(nodes[0])
print("symbols with codes", huffman_encoding)
Total_Gain(data, huffman_encoding)
encoded_output = Output_Encoded(data,huffman_encoding)
return encoded_output, nodes[0]
5
string = ''.join([str(item) for item in decoded_output])
return string
6. Travail à Faire
NB : Rendre le travail sous forme de documents word. Le travail peut être effectué par un ou
deux étudiants.