This library can decode at least 4 billions of compressed integers per second on most desktop or laptop processors. That is, it can decompress data at a rate of 15 GB/s. This is significantly faster than generic codecs like gzip, LZO, Snappy or LZ4.
Самый простой вариант сделать последовательность разностей, закодированную с переменной длиной и сжать RLE потом. После этого можно убрать остальную избыточность через deflate или xz.
Попробовал snappy на последовательности разностей - вообще отлично: коэффициент сжатия 50% и время распаковки в 5-6 раз меньше, чем у стандартных gzip/deflate/lzw/zlib.
Плохо жмет RLE такие данные. Где snappy сжимает наполовину, RLE (простая реализация с гистограммой) - всего на 1%, в то время как скорость у snappy всего на чуточку меньше.
можно не строить последовательность разниц - результат snappy не будет существенно отличаться, такими вычислениями вы не изменяете избыточность.
сугубо академично: вопрос у вас скорее не о сжатии данных, а о наиболее компактном представлении множества. Если знать больше о данных (вероятность дублировании значений, типичные длины выборок и прочее) то тут могут накидать идей/методов по «сжатию» в разы и на порядки, а не на жалкие 30-40%