coco011 | Bonjour,
Je suis en train de créer une fonction qui construit l'arbre de Huffman sur Python:
Code :
- def arbre_huffman(occurrences): #occurences correspond au dictionnaire de fréquences de chaque caractère
- # Construction d'un tas avec les lettres sous forme de feuilles
- tas = [(occ, lettre) for (lettre, occ) in occurrences.items()]
- heapq.heapify(tas)
- # Création de l'arbre
- while len(tas) >= 2:
- occ1, noeud1 = heapq.heappop(tas) # noeud de plus petit poids occ1
- occ2, noeud2 = heapq.heappop(tas) # noeud de deuxième plus petit poids occ2
- heapq.heappush(tas, (occ1 + occ2, {0: noeud1, 1: noeud2}))
- # ajoute au tas le noeud de poids occ1+occ2 et avec les fils noeud1 et noeud2
- return heapq.heappop(tas)[1]
|
Mais je reçois le message d'erreur : '<' not supported between instances of 'dict' and 'str' Je crois que c'est parce que le tas se trie en comparant les membres de droite (de type str et de type dict) des couples alors que je souhaiterais qu'il se trie en comparant le membre de gauche des couples considérés (entiers)
Par exemple pour le mot abracadabra, j'ai un dictionnaire de cette forme :
Code :
- {'a': 5, 'b': 2, 'r': 2, 'c': 1, 'd': 1}
|
Puis mon tas initial est : Code :
- [(1, 'c'), (1, 'd'), (2, 'r'), (2, 'b'), (5, 'a')]
|
Avez vous des suggestions ?
Merci d'avance |