Data encoding problems all relate to how we can take a problem and make it recursive.
We can apply data compression to encoding symbols in bits, encoding finding prefix codes (mapping letters to bit strings 1:1), etc.
We can represent prefix codes by using binary trees:
Huffman's algorithm takes this a step farther, saying that if the alphabet S has more than two letters, we form an alphabet S' excluding the two lowest-frequency letters, replacing them with a new letter. We construct a prefix code c for S', and define a prefix code for S beginning with the tree used to find c.
This algorithm uses the minimum needed number of bits per letter for a prefix code, and can run in O(k^2) time. If we use priority queues, we can get O(k logk) time.
I know this should have been interesting, but since I missed class I'm just basing my opinion on the book which was not interesting. 4/10.