Сжатие серии единиц и нулей - PullRequest
0 голосов
/ 03 марта 2011

Мне нужно сжать ряд из 1 и 0, как этот

http://cid -f328e92ab80e3d64.office.live.com / self.aspx / .Public / bits.txt

Может кто-нибудь предложить мне, какой кодер для пользователя для достижения наилучшего сжатия (Хаффман, арифметика, BWT, LZW, RLE, PAQ ...)

Любая помощь приветствуется и спасибо заранее.

С уважением, Чаки

P.S. Я обнаружил, что bwtmix уменьшается до 577 байт, но он написан на c ++, и мне нужно это в c.

1 Ответ

0 голосов
/ 03 марта 2011

Эта программа на Python, просто конвертируя единицы и нули в байты, сжимает ее до 715 байтов, включая 16-битное начальное число. К сожалению, тогда стандартные программы сжатия zip, gzip и bzip2, по-видимому, больше не могут использовать сжатие.


import sys, struct
i, n, b, count = 0, 0, '', 0
for byte in open('/tmp/binary.txt').read().rstrip():
 n = (n << 1) | (ord(byte) & 1)
 i = (i + 1) % 8
 if i == 0:
  n, b = 0, b + chr(n)
 count += 1
sys.stdout.write(struct.pack('<h', count) + b)
...