Huffman Encoding Python
- Get link
- X
- Other Apps
PROGRAM TO PERFORM HUFFMAN CODING
class node: def __init__(self, freq, symbol, left=None, right=None): # frequency of symbol self.freq = freq # symbol name (charecter) self.symbol = symbol # node left of current node self.left = left # node right of current node self.right = right # tree direction (0/1) self.huff = ''# utility function to print huffman# codes for all symbols in the newly# created Huffman treedef printNodes(node, val=''): # huffman code for current node newVal = val + str(node.huff) # if node is not an edge node # then traverse inside it if(node.left): printNodes(node.left, newVal) if(node.right): printNodes(node.right, newVal) # if node is edge node then # display its huffman code if(not node.left and not node.right): print(f"{node.symbol} -> {newVal}")# charecters for huffman treechars = ['a', 'b', 'c', 'd', 'e', 'f']# frequency of charectersfreq = [ 5, 9, 12, 13, 16, 45]# list containing unused nodesnodes = []# converting ccharecters and frequencies# into huffman tree nodesfor x in range(len(chars)): nodes.append(node(freq[x], chars[x]))while len(nodes) > 1: # sort all the nodes in ascending order # based on theri frequency nodes = sorted(nodes, key=lambda x: x.freq) # pick 2 smallest nodes left = nodes[0] right = nodes[1] # assign directional value to these nodes left.huff = 0 right.huff = 1 # combine the 2 smallest nodes to create # new node as their parent newNode = node(left.freq+right.freq, left.symbol+right.symbol, left, right) # remove the 2 nodes and add their # parent as new node among others nodes.remove(left) nodes.remove(right) nodes.append(newNode)# Huffman Tree is ready!printNodes(nodes[0])
OUTPUT:
f: 0 c: 100 d: 101 a: 1100 b: 1101 e: 111
- Get link
- X
- Other Apps
Comments
Post a Comment