【问题标题】:LZ4 compressed text is larger than uncompressedLZ4 压缩文本大于未压缩文本
【发布时间】:2023-07-19 16:05:01
【问题描述】:

我读过 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,但结果是一样的。但是,如果我生成具有相同符号的字符串或使用两个不同的符号,则存在压缩。

【问题讨论】:

  • 你对压缩没有模式的随机数据有什么期望(你的问题实际上就是答案)?
  • 文字大小:65535 压缩后大小:65793
  • 噪声(== 随机数据)不可压缩。这是随机源的核心属性。为了使您的测试有效,您最好将一些真实文本加载到缓冲区中。

标签: compression lzw lz4


【解决方案1】:

看看description of the LZ4 algorithm。它引用压缩文本中的公共子字符串。它使用已经输出的文本作为字典。

没有任何长度的重复序列的随机文本或任何其他材料将无法很好地压缩使用它。对于该明文,位压缩算法可能会做得更好。

【讨论】: