next up previous
Next: Up: Previous:

Greedy Algorithm for Huffman Code

Idea: Merge the two lowest-frequency nodes (leaf or internal) into a new node until every leaf has been considered.

Use a priority queue Q to keep nodes ordered by frequency.

   Huffman(c)                        ; Analysis
      n = |c|                        ; Q is a binary heap
      Q = c                          ; O(n) BuildHeap
      for i = 1 to n-1               ; O(n)
         z = Allocate-Node()
         x = Extract-Min(Q)          ; O(lgn) O(n) times
         y = Extract-Min(Q)          ; O(lgn) O(n) times
         left(z) = x
         right(z) = y
         f(z) = f(x) + f(y)
         Insert(Q,z)                 ; O(lgn) O(n) times
      return Extract-Min(Q)          ; -----------------
                                     ; O(nlgn)


next up previous
Next: Up: Previous: