Pour améliorer la compression gzip, vous souhaitez que les chaînes "similaires" soient fermées dans la liste. Il existe plusieurs façons de définir une telle similitude; permettez-moi d'en décrire une raisonnable qui fonctionne bien dans la pratique. Rappelons que la taille de bloc de gzip est de 64 Ko. Ainsi, vos données seront divisées en blocs de 64 Ko et chaque bloc sera compressé indépendamment. Pour optimiser la compression, il faudrait minimiser le nombre de k-mers distincts (sous-chaînes de taille k) dans chaque bloc. La motivation est que toutes ces sous-chaînes seront remplacées par un identifiant.
Alors que le problème ci-dessus est difficile en théorie (c'est une variante du partitionnement hypergraphique), il existe des algorithmes pratiques rapides. Je recommanderais un clustering de type LSH qui peut être implémenté en un seul passage sur vos données. Notez que le tri (alphabétique) est une autre façon de "regrouper" des chaînes similaires. Cependant, les algorithmes de clustering spécialisés peuvent mieux fonctionner.
Une alternative consiste à utiliser zstd , qui est (i) plus rapide, (ii) obtient des taux de compression plus élevés et (iii) n'a pas de limites sur la taille du bloc (et donc, comprime les chaînes également bien quel que soit l'ordre d'entrée).