lz4能找到连续重复的子串吗?
Can lz4 find continuous repeated substrings?
我查看了 link 以了解 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可以找到重复的子串。
它甚至很容易找到它们。
重复的子串可以有任意长度,最大 64 KB。
实际上,大多数重复模式都是 <= 4 个字节,其中最常见的是一串零。但偶尔会有异常值。
一旦找到模式,就可以重复任意次数。 LZ4对匹配大小没有格式限制
我查看了 link 以了解 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可以找到重复的子串。 它甚至很容易找到它们。
重复的子串可以有任意长度,最大 64 KB。 实际上,大多数重复模式都是 <= 4 个字节,其中最常见的是一串零。但偶尔会有异常值。
一旦找到模式,就可以重复任意次数。 LZ4对匹配大小没有格式限制