| |||||||||
Delta encoding is a way of storing data in form of differences (deltas) between sequential data rather than data themselves. It is sometimes called delta compression because some instances of the encoding can make encoded data shorter than non-encoded data.
Perhaps the simplest example is storing values of bytes as differences (deltas) between sequential values, rather than the values themselves. So, instead of 2, 4, 6, 9, 7, we would store 2, 2, 2, 3, -2. This is not very useful when used alone, but it can help further compression of data in which sequential values occur often. IFF 8SVX sound format applies this encoding to raw sound data before applying compression to it. Unfortunately, not even all 8-bit sound samples compress better when delta encoded, and the usability of delta encoding is even smaller for 16-bit and better samples. Therefore, compression algorithms often choose to delta encode only when the compression is better than without.
A variation of delta encoding which encodes differences between the prefixes or suffixes of strings is called incremental encoding. It is particularly effective for sorted lists with small differences between strings, such as a list of words from a dictionary.
The nature of the data to be encoded influences the effectiveness of a particular compression algorithm. Delta encoding performs best when data has small or constant variation; for an unsorted data set, there may be little to no compression possible with this method.
The following C code performs delta encoding and decoding:
Another instance of use of delta encoding is RFC 3229, "Delta encoding in HTTP," which proposes that HTTP should be able to send updated Web pages in form of differences between versions (deltas), which should decrease Internet traffic, as most pages change slowly over time, rather than being completely overwritten repeatedly: