2017-03-17 6 views
1

Ich schaute in die link, um zu verstehen, wie lz4 funktioniert. Ich habe den folgenden Test geschrieben. Wir können sehen, dass sinInput2 nicht komprimiert werden kann, da es nur zufällige Daten enthält. Die Größe von sinInput1 ist auf 1/8 reduziert. Ich schätze das liegt daran, dass seine Daten 8 verschiedene Blöcke haben. Bedeutet es, dass lz4 wiederholte Teilstrings finden kann? Gibt es eine Grenze dafür, wie lange ein Teilstring gefunden werden kann?Kann lz4 kontinuierliche wiederholte Teilstrings finden?

#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 

Antwort

1

LZ4 kann wiederholte Teilzeichenfolge finden. Es ist sogar sehr einfach für sie, sie zu finden.

Der wiederholte Teilstring kann eine beliebige Länge von bis zu 64 KB haben. In der Praxis sind die meisten wiederholten Muster < = 4 Bytes und die häufigste von ihnen ist eine Reihe von Nullen. Aber es gibt gelegentliche Ausreißer.

Sobald ein Muster gefunden wurde, kann es beliebig oft wiederholt werden. LZ4 hat keine Formatbegrenzung für die Größe von Übereinstimmungen.

Verwandte Themen