Как gzip не находит две одинаковые части? - PullRequest
0 голосов
/ 21 мая 2018

Я написал такой код

#include "zlib.h"
unsigned char dst[1<<26];
unsigned char src[1<<24];
int main() {
    unsigned long dstlen = 1<<26;
    srand (12345);
    for (int i=0; i<1<<23; i++) src[i] = src[i | 1<<23] = rand();
    compress(dst,&dstlen,src,1<<24);
    printf ("%d/%d = %f\n", dstlen, 1<<24, dstlen / double(1<<24));
}

, который пытается сжать две одинаковые 2 23 байта, соединенные вместе.Однако в результате получается

16782342/16777216 = 1.000306

Как данные с таким правилом не сжимаются?

1 Ответ

0 голосов
/ 21 мая 2018

Максимальное расстояние для сопоставления строк в zlib составляет 32 768 байт назад.

...