I have a working version of an LZW demo program. (The program is slow as I have not implemented a hash table or tree for the dictionary, but that is OK as I am working on that now.) The compressor outputs codes that range from 10 bits to 15 bits (the bit length starts at 10 bits and increases as the program continues to operate and is not fixed). The program also decompresses the compressed files into a file that is identical to the original file that was first compressed.
The demo program was written in Visual Studio 2008 and has an MFC dialog-based front end.
I would like the output codes compressed with huffman encoding, and the subsequent huffman decoding added to the current decompression. This is similar to gzip, which uses Huffman to compress its output codes. The desired result is to get LZW at least close to the effectiveness of GZip.
There is a user interface label that shows the compression percentage of the current LZW, and this will need to be updated with the compression percentage of the enhanced compression.
There will be a bonus for good additional compression past straight LZW. The intention is to get this close to GZip as LZW in general does not compress nearly as well as GZip.
Less than 10 percent improvement (average) compression - no bonus
[url removed, login to view] percent improvement (average) compression - $100.00 bonus
[url removed, login to view] percent improvement (average) compression - $250.00 bonus
[url removed, login to view] percent improvement (average) compression - $400.00 bonus
40 or more percent improvement (average) compression - $700.00 bonus
To benchmark the results, use the included files. This archive includes the Visual Studio 2008 project and ten sample files. An average of all ten files will be used to determine the effectiveness of the coding.
The additional compression ratio will be calculated with the following formula:
( ( StraightLZWSize - EnhancedLZWSize ) / StraightLZWSize) * 100
Included in the archive is a spreadsheet with target file sizes that meet the criteria. It will be an average of all file sizes. If there are files that are larger than the target file size but the average of all files meets the criteria, the target will have been met.
The additional compression layer should be added to the BitIO::WriteNextCode() and BitIO::ReadNextCode() methods. I can give more details once a bid has been accepted.