Esiste una libreria di compressione che supporta "l'apprendimento" su alcuni set di file o l'utilizzo di alcuni file come base per la compressione di altri file?
Questo può essere utile se vogliamo comprimere molti file simili mantenendo un accesso rapido a ciascuno di essi.
Qualcosa di simile a:
# compression:
compressor.learn_on_data(standard_data);
compressor.compresss(data, data_compressed);
# decompression:
decompressor.learn_on_data(the_same_standard_data);
decompressor.decompress(data_compressed, data);
Come si chiama (penso che "deltala compressione "è un po 'altra cosa)? Ci sono implementazioni di questo nelle librerie di compressione popolari? Mi aspetto che funzioni, ad esempio, pre-compilando dizionari con dati standard.
risposte:
2 per risposta № 1Sì funziona. Sebbene ci siano molte tecniche per questo, la più semplice che trovi è chiamata "pre-riempimento del dizionario". In breve, stai fornendo un file, da cui l'ultima parte è "digerita" (fino alla dimensione massima della finestra, che può essere ovunque da 4K a 64 MB a seconda dell'algoritmo) e può quindi essere utilizzato per comprimere meglio il prossimo file.
In pratica, è simile alla "modalità solida",quando all'interno di un archivio tutti i file di tipo identico sono raggruppati insieme, in modo che il file precedente possa essere usato come dizionario per il prossimo, il che migliora il rapporto di compressione.
Lato negativo: lo stesso dizionario deve essere fornito sia per il compressore che per il decompressore.