2015-08-05 5 views
2

Я читал, что алгоритм 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, но результат такой же. Но если я создаю строку с одинаковыми символами или говорю с двумя разными символами, тогда присутствует сжатие.

+5

Что вы ожидаете от сжатия случайных данных, не имеющих шаблонов (ваш вопрос на самом деле является ответом)? –

+0

Размер текста: 65535 Сжатый размер: 65793 – user2123079

+2

шум (== случайные данные) не сжимается. Это основное свойство случайного источника. Чтобы ваш тест был действительным, вы должны лучше загрузить какой-либо реальный текст в свой буфер. – Cyan

ответ

3

Посмотрите на description of the LZ4 algorithm. Он ссылается на общие подстроки в сжатом тексте. Он использует уже выходной текст в качестве словаря.

Случайный текст или любой другой материал без повторяющихся последовательностей любой длины не будет хорошо сжиматься, используя его. Для этого открытого текста алгоритм битового сжатия, вероятно, будет лучше.

Смежные вопросы