31.03.2015 Views

Huffman Codes

Huffman Codes

Huffman Codes

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

_ (space) 10 M 0101<br />

A 0010 P 0110<br />

E 11 R 00001<br />

H 00000 S 0111<br />

I 0011 X 0001<br />

L 0100<br />

Symbols with higher frequency will be included later in the tree and therefore will be<br />

closer to the root – this means shorter code.<br />

Implementation<br />

There are various implementations of the algorithm. One implementation is given below:<br />

Let N be the number of the characters in the alphabet<br />

Data structures need:<br />

Array frequencies[0...2N] : represents node frequencies.<br />

The first N elements represent the frequencies of the alphabet characters.<br />

if frequencies[k] > 0, 0 k N-1, then frequencies[k] is a terminal node<br />

representing the k-th character<br />

Array parents[0..2N] : represents the parents of each node in array frequencies.<br />

The parent of node k with frequency frequencies[k] is given by abs(parents[k]).<br />

If parents[k] > 0, node k is linked to the left of its parent, otherwise – to the right.<br />

Priority queue with elements (k, frequencies[k]), where the priority is represented by<br />

frequencies[k].<br />

1. For each character at position k in the alphabet compute frequencies[k] and insert<br />

in a priority queue if frequencies[k] > 0<br />

2. m N<br />

3. while PQueue not empty do<br />

a. deleteMin from PQueue (node1, frequency1)<br />

b. if PQueue empty break<br />

c. else deleteMin from PQueue (node2, frequency2)<br />

d. frequencies[m] frequency1 + frequency2 // new node<br />

e. parents[node1] m // left link<br />

f. parents[node2] -m // right link<br />

g. insert in PQueue (m, frequency1 + frequency2)<br />

h. m m + 1<br />

4. end // tree is built with root = node1<br />

3

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!