Щоб покращити стиснення gzip, ви хочете, щоб «подібні» рядки були близькими до списку. Існує ряд способів визначення такої подібності; дозвольте описати розумний, який добре працює на практиці. Нагадаємо, що розмір блоку gzip - 64K. Таким чином, ваші дані будуть розділені на блоки по 64 К байт, і кожен блок буде стискатися незалежно. Щоб оптимізувати стиснення, потрібно було б мінімізувати кількість різних k-mers (підрядків розміром k) у кожному блоці. Мотивація полягає в тому, що всі такі підрядки будуть замінені ідентифікатором.
Хоча вищезазначена проблема є теоретично складною (це варіант розподілу гіперграфа), існують швидкі практичні алгоритми. Я рекомендую кластеризацію, схожу на LSH, яку можна реалізувати за один прохід над вашими даними. Зауважте, що (в алфавітному порядку) сортування - це ще один спосіб "об'єднати" схожі рядки разом. Однак спеціалізовані алгоритми кластеризації можуть працювати краще.
Альтернативою є використання zstd , яке (i) швидше, (ii) отримує більш високі коефіцієнти стиснення, і (iii) не має обмежень щодо розміру блоку (і, таким чином, стискає рядки однаково добре незалежно від впорядкування введення).