Я читал, что алгоритм 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;
Я также пробовал LZ4_compress, но результат такой же. Но если я создаю строку с одинаковыми символами или говорю с двумя разными символами, тогда присутствует сжатие.
Что вы ожидаете от сжатия случайных данных, не имеющих шаблонов (ваш вопрос на самом деле является ответом)? –
Размер текста: 65535 Сжатый размер: 65793 – user2123079
шум (== случайные данные) не сжимается. Это основное свойство случайного источника. Чтобы ваш тест был действительным, вы должны лучше загрузить какой-либо реальный текст в свой буфер. – Cyan