我想像这样压缩数据:
1 41 26 11 20 35 22 37 4 17 30 10 25 40 16 31 7 34 21 36 3
1 41 26 11 35 20 31 7 22 37 4 17 30 10 25 40 16 3 36 21 34
1 17 4 11 26 15 28 13 41 9 20 35 22 37 24 39 7 31 3 19 34
1 17 4 11 39 22 35 20 9 37 24 41 13 28 15 26 43 19 34 7 31 3
1 21 32 19 34 14 29 5 25 10 43 26 13 28 41 24 37 9 33 18 42 3
1 28 13 24 41 26 43 3 42 18 33 9 37 5 29 14 25 10 21 32 19 34
使用C++17。 数据仅包含0~9和空格,用于分隔符。 整数范围为1~1036。 文本大小约为 2MB,我想将其压缩到 500KB 或更低。 糟糕的是,我只能使用标准库,zlib 不是一个选项。 压缩时间可以长一些,但解压时间越短越好。
目前尝试过:
将包含分隔符的整数(即“1”到“1”,“10”到“!”...)转换为1~2字节一个UTF-8字符。 结果是 940KB。不错,但仍然很大:(
Huffman压缩,然后Base64编码。 除哈夫曼树外,结果为 1.1MB。比转型更糟糕:(
我还有什么可以尝试的选择吗?
除非您的数据中存在某种形式的冗余而您没有告诉我们,否则您的压缩效果不会好于大约三倍。绝对不是四的因数。