LZ4压缩文本比未压缩文本大

use*_*079 3 compression lzw lz4

我读到 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;
Run Code Online (Sandbox Code Playgroud)

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

wal*_*lyk 5

看一下LZ4 算法的描述。它引用压缩文本中的公共子字符串。它使用已经输出的文本作为字典。

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