LZ4压缩文本比未压缩的文本更大。

3

我了解到lz4算法非常快,而且具有相当不错的压缩效果。但是在我的测试应用程序中,压缩后的文本比源文本还要大。这是什么问题?

srand(time(NULL));
std::string text;
for (int i = 0; i < 65535; ++i)
    text.push_back((char)(0 + rand() % 256));

cout << "Text size: " << text.size() << endl;

char *compressedData = new char[text.size() * 2];
int compressedSize = LZ4_compress(text.c_str(), text.size(), compressedData);

cout << "Compressed size: " << compressedSize << endl;

我也尝试了LZ4_compress,但结果是一样的。但如果我生成具有相同符号或说具有两个不同符号的字符串,则会出现压缩。

8
对于没有模式的随机数据进行压缩,你期望得到什么?(你的问题实际上就是答案。) - user2249683
文本大小:65535 压缩后大小:65793 - user2123079
4
噪音(==随机数据)是不可压缩的,这是随机源的核心特性。为了使您的测试有效,最好在缓冲区中加载一些真实文本。 - Cyan
1个回答

5
请查看LZ4压缩算法的描述,它引用了压缩文本中的常见子字符串。它使用已输出文本作为字典。对于没有重复序列的任何长度的随机文本或其他材料,使用LZ4算法压缩效果不佳。对于这种纯文本,位压缩算法可能会更好些。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接