2017-03-17 12 views
1

lz4의 작동 방식을 이해하기 위해 link을 조사했습니다. 나는 다음 시험을 썼다. 임의의 데이터 만 있기 때문에 sinInput2를 압축 할 수 없습니다. sinInput1의 크기는 1/8로 줄어 듭니다. 나는 그것의 데이터가 8 개의 다른 블록을 가지고 있기 때문에 이것이라고 생각한다. lz4가 반복되는 부분 문자열을 찾을 수 있다는 것을 의미합니까? 하위 문자열을 찾을 수있는 기간에 제한이 있습니까?lz4가 연속 반복 부분 문자열을 찾을 수 있습니까?

#include <string> 
#include <iostream> 
#include "lz4.h" 
#include <stdio.h>  /* printf, NULL */ 
#include <stdlib.h>  /* srand, rand */ 
#include <time.h>  /* time */ 
#include <math.h> 
int main() { 
    using namespace std; 

    srand(time(NULL)); 
    double sinInput1[1024]; 
    double sinInput2[1024]; 
    for (int i = 0; i < 1024; ++i) { 
     sinInput1[i]=sin(i % 128); 
     sinInput2[i]=sin(i); 
    } 

    int inputSize = 1024 * sizeof(double); 
    cout << "Input size: " << inputSize << endl; 
    char *compressedData = new char[2 * inputSize]; 

    cout << "Compressed size of sinInput1: " << LZ4_compress_fast((char*)sinInput1, compressedData, inputSize, inputSize*2, 1) << endl; 
    cout << "Compressed size of sinInput2: " << LZ4_compress_fast((char*)sinInput2, compressedData, inputSize, inputSize*2, 1) << endl; 

    return 0; 
} 

Input size: 8192 
Compressed size of sinInput1: 1064 
Compressed size of sinInput2: 8222 

답변

1

LZ4는 반복되는 부분 문자열을 찾을 수 있습니다. 찾기가 매우 쉽습니다.

반복되는 하위 문자열의 길이는 최대 64KB가 될 수 있습니다. 실제로 대부분의 반복 패턴은 < = 4 바이트이며, 가장 일반적인 패턴은 0 번입니다. 그러나 때로는 특이 치가 있습니다.

패턴을 찾으면 여러 번 반복 할 수 있습니다. LZ4에는 일치하는 크기에 대한 형식 제한이 없습니다.