(C++17) 仅使用标准库对 C++ 进行高效的文本到文本压缩?

问题描述 投票:0回答:1

我想像这样压缩数据:

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”到“1”,“10”到“!”...)转换为1~2字节一个UTF-8字符。 结果是 940KB。不错,但仍然很大:(

  2. Huffman压缩,然后Base64编码。 除哈夫曼树外,结果为 1.1MB。比转型更糟糕:(

我还有什么可以尝试的选择吗?

c++ text c++17 compression
1个回答
0
投票

除非您的数据中存在某种形式的冗余而您没有告诉我们,否则您的压缩效果不会好于大约三倍。绝对不是四的因数。

© www.soinside.com 2019 - 2024. All rights reserved.