Compression lz4能找到连续重复的子串吗?

Compression lz4能找到连续重复的子串吗?,compression,lz4,Compression,Lz4,我研究了这个问题,以了解lz4是如何工作的。我编写了以下测试。我们可以看到sinInput2无法压缩,因为它只有随机数据。sinInput1的大小减小到1/8。我猜这是因为它的数据有8个不同的块。这是否意味着lz4可以找到重复的子字符串?它对子字符串的长度有限制吗 #include <string> #include <iostream> #include "lz4.h" #include <stdio.h> /* printf, NULL */ #

我研究了这个问题,以了解lz4是如何工作的。我编写了以下测试。我们可以看到sinInput2无法压缩,因为它只有随机数据。sinInput1的大小减小到1/8。我猜这是因为它的数据有8个不同的块。这是否意味着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
#包括
#包括
#包括“lz4.h”
#include/*printf,空*/
#包括/*srand,兰特*/
#包括/*时间*/
#包括
int main(){
使用名称空间std;
srand(时间(空));
双正弦输入1[1024];
双正弦输入2[1024];
对于(int i=0;i<1024;++i){
sinInput1[i]=sin(i%128);
sinInput2[i]=sin(i);
}
int inputSize=1024*sizeof(双精度);

coutLZ4可以找到重复的子串。 它甚至很容易找到它们

重复的子字符串可以有任意长度,最长可达64 KB。 实际上,大多数重复的模式是