我已经读过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,但结果是一样的。但是如果我用相同的符号生成字符串或用两个不同的符号说,那么就会出现压缩。
答案 0 :(得分:3)
看看description of the LZ4 algorithm。它引用压缩文本中的常见子串。它使用已输出的文本作为字典。
随机文本或任何其他不重复任何长度序列的材料都不能很好地使用它进行压缩。对于那个明文,比特压缩算法可能会做得更好。