Para mejorar la compresión gzip, desea que las cadenas "similares" estén cerca de la lista. Hay varias formas de definir tal similitud; permítanme describir una razonable que funciona bien en la práctica. Recuerde que el tamaño de bloque de gzip es 64K. Por lo tanto, sus datos se dividirán en bloques de 64K bytes y cada bloque se comprimirá de forma independiente. Para optimizar la compresión, sería necesario minimizar el número de k-mers distintos (subcadenas de tamaño k) en cada bloque. La motivación es que todas esas subcadenas serán reemplazadas por un identificador.
Si bien el problema anterior es difícil en teoría (es una variante de la partición de hipergrafía), existen algoritmos prácticos rápidos. Recomendaría la agrupación tipo LSH que se puede implementar con un solo paso sobre sus datos. Observe que la ordenación (alfabéticamente) es otra forma de "agrupar" cadenas similares juntas. Sin embargo, los algoritmos de agrupamiento especializados pueden funcionar mejor.
Una alternativa es usar zstd , que es (i) más rápido, (ii) obtiene relaciones de compresión más altas y (iii) no tiene limitaciones en el tamaño del bloque (y, por lo tanto, comprime las cadenas igualmente bien, independientemente del orden de entrada).