- bv.h
- code.h
- decode.c
- encode.c
- heap.h
- huffman.c, huffman.h
- queue.c, queue.h
- stack.c, stack.h
- Makefile
Command |
Description |
make |
Compiles the encode and decode programs. |
make all |
Compiles the encode and decode programs. |
make encode |
Compiles the encode program. |
make decode |
Compiles the decode program. |
make clean |
Remove the object files and encode/decode binaries |
./encode [flags] |
Run the encode program. |
./decode [flags] |
Run the decode program. |
Argument(s) |
Description |
Coding Type |
-i [path] |
Full path to the input file |
Both [REQUIRED] |
-o [path] |
Full path to the output file |
Both |
-A |
Sets all flags (-vp, -ch if available) |
Both |
-v |
Enable verbose mode - prints statistics about the program |
Both |
-p |
Prints the Huffman Tree |
Both |
-c |
Prints the codes/bit paths to each leaf in the Huffman Tree |
Encoding |
-h |
(./encode only) Prints the histogram of bytes |
Encoding |
These programs encode/decode any file by using the greedy Huffman Algorithm.
- Construct a histogram of the bytes in a file.
- Enqueue each histogram entry as a node in the Huffman Tree.
- Repeatedly dequeue 2X and enqueue until the root of the tree is remaining.
- Load the codes for each leaf by a post-order traversal of the tree, assigning a 0 when traversing left and a 1 when traversing right. Store the codes in a bit vector for maximum efficiency.
- Write the tree and the paths to each leaf to an encoded output file.
- Read the encoded file.
- Reconstruct the Huffman Tree with a stack.
- For each byte in the original, uncompressed file, look up its code and step through the tree.
- Write the bytes back to a decoded output file.
- Using both programs, any file can be encoded and then decoded back to an exact copy of the original.
- Note that the default permissions to a file are 0744 (-rwxr--r--).
You may change these on your own if they do not suit what you intended.