I need a lossless compression algorithm/program to make a n-bytes sequence to be a (n-1) bytes sequence. For example:
5-bytes sequence represented by: ABCDE,
compressed to 4-bytes sequence, represented by: KLMN.
KLMN must be able to be uncompressed back to ABCDE.
Or to compress a n-bits sequence to be a (n-1) bits sequence, for example 01010101 compressed to 1101101.
It doesn't need to be exactly (n-1) bits/bytes, it can be (n-2), (n-3) or less, the less the better.
For n, it can be any number (e.g. 100 bytes compressed to 99 bytes).
And the bytes/bits sequence must be able to be compressed with this method in any byte sequence combination, this is the one I know is the limitation of most-used compression technique such as RLE, LZW and Huffman.
I've tried to use a XOR and several boolean logic method to do it:
For example, I have 4 bytes: A,B,C,D, and I compressed it to 3 bytes:
A xor B = AB
A xor C = AC
A xor D = AD
To uncompress it:
AB xor AC xor AD = ABCD
ABCD xor AB = CD
But then I keep end up with a cyclic XOR operation, which cannot result the uncompressed byte. I've also tried the other combinations, but didn't give any result.
I know here's not a general algorithm topic area (which I can't find one), but since Pascal is widely used to learn an algorithm, I think I can get good answers here. For a start, I offered 30 points, but for a solution (prefereably a good one), I will change it to 300 or more points.
There are byte sequences that can't be compressed any more (statistically uniform distributed random-data for example)
You can use ordinary compression algorithms for most data. these will, however make a larger compressed file if the data itself is not compressable.
If there would be a algorithm you asked for, you could apply it 99 times on a 100 byte chunk and get a 1 byte compressed file.. All storage problems would be solved... unfortunately there is no algorithm to do this.
Nils